我刚刚在尝试向 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();
}
}
问题是该对话框在五秒后显示(即当窗口已经关闭并且应用程序退出时,我测试了它,并且在应用程序启动时运行时它在五秒后完美显示)。
你们知道一种相反的方法吗?
最佳答案
您正在阻塞 UI 线程。基本上不要这样做...如果您想稍后在 UI 线程上执行某些操作,请使用 Swing 计时器或类似的东西。
黄金法则:
- 不要在 UI 线程上执行任何耗时的操作
- 仅在 UI 线程上访问 UI
关于java - 在 Thread.sleep() 之前创建的 JDialog 在 sleep 完成后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278816/