JDialog created before Thread.sleep() shows after sleep is finished

I just encountered a problem when trying to add an imprint to a swing application which is shown for five seconds when the application is closed.

I had planned to open a JDialog just containing a simple image when the main frame is closed.

I got a function showing the JDialog (I removed everything which is not necessary).

public static void show() { 

    JDialog d = new JDialog();  
    JLabel l = new JLabel(new ImageIcon(MainController.class.getClass().getResource("/path/to/endlogo.png")));          
    d.add(l);       
    d.setVisible(true);

}

The function is called by the following snippet (in the window listener of my main window)

@Override
public void windowClosing(WindowEvent e) {

    show();

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }           

}

The problem is that the dialog is shown AFTER the five seconds (which is when the windows is already closed and the application exited, I tested it and it showed up perfectly after five seconds when run on application start).

Do you guys know a way to achieve it the other way round?

Jon Skeet
people
quotationmark

You're blocking the UI thread. Don't do that, basically... use a swing timer or something similar if you want to do something on the UI thread at a later time.

Golden rules:

  • Don't do anything time consuming on the UI thread
  • Only access the UI on the UI thread

people

See more on this question at Stackoverflow