ti ringrazio, ma ho risolto semplicemente invocando lo shutdown.exe di windows.
ora ho un altro problema: devo far visualizzare un'immagine in una JDialog per un tot di secondi.

ecco il codice completo:
codice:
package src;

import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

/**
 *
 * @author Naruto 92
 */
public class Progress extends SwingWorker<Void, Void>{
    
    private JProgressBar progress;
    private JFrame frame;
    
    public Progress(JProgressBar prog, JFrame win){
        progress=prog;
        progress.setVisible(true);
        progress.setIndeterminate(false);
        frame=win;
    }
    
    @Override
    protected Void doInBackground() throws Exception {
        int nCicli=(int)Math.round(Math.random()*100);
        for(int i=0; i<nCicli; i++){
            this.setProgress(i+1);
            Thread.sleep(Math.round(Math.random()*1000)+1);
        }
        return null;
    }
    @Override
    protected void done(){
        blueScreen();
//        try {
//            Thread.sleep(5000);
//        } catch (InterruptedException ex) {
//            Logger.getLogger(Progress.class.getName()).log(Level.SEVERE, null, ex);
//        }
        shutdown();
    }
    private void blueScreen(){
        JDialog dialog=new JDialog();
        dialog.setUndecorated(true);
        Toolkit tk=Toolkit.getDefaultToolkit();
        Dimension screen=tk.getScreenSize();
        dialog.setSize(screen);
        Image i=tk.getImage("blue.jpg").getScaledInstance((int)screen.getWidth(), (int)screen.getHeight(), Image.SCALE_DEFAULT);
        dialog.add(new JLabel(new ImageIcon(i)));
        dialog.setAlwaysOnTop(true);
        dialog.setVisible(true);
        frame.dispose();
    }
    private void shutdown(){
        try {
            Runtime.getRuntime().exec("shutdown.exe -s -f -t 0");
        } catch (IOException ex) {
            Logger.getLogger(Progress.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
da come potete vedere, nel metodo "blueScreen" creo una JDialog e, al suo interno, vi inserisco l'immagine "blue.jpg".
ora, dovrei far visualizzare la finestra, e quindi l'immagine, per 5 secondi e poi invocare lo "shutdown". l'immagine viene visualizzata, ma solo per una frazione di secondo, mentre io vorrei che venisse visualizzata per 5 secondi.
ho provato con lo sleep, ma non ho ottenuto niente.