在睡眠完成后,Thread.sleep()显示之前创建的JDialog

时间:2014-12-03 18:16:45

标签: java swing

我尝试向swing应用程序添加一个印记时遇到了一个问题,该应用程序在应用程序关闭时会显示五秒钟。

我打算在主框架关闭时打开一个只包含简单图像的JDialog。

我有一个显示JDialog的函数(我删除了所有不必要的东西)。

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);

}

该函数由以下代码段调用(在我的主窗口的窗口监听器中)

@Override
public void windowClosing(WindowEvent e) {

    show();

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

}

问题是对话框显示在五秒钟之后(当窗口已经关闭并且应用程序退出时,我测试了它,并且在应用程序启动时运行五秒后它显示完美)。

你们是否知道如何以相反的方式实现它?

1 个答案:

答案 0 :(得分:1)

您正在阻止UI线程。不要这样做,基本上......如果你想在以后的UI线程上做某事,可以使用swing计时器或类似的东西。

黄金法则:

  • 不要在UI线程上花费任何时间
  • 仅访问UI线程上的UI