我正在创建一个应用程序,在其中测试一定数量的界面功能,并且当发生错误时,我希望显示一条错误消息.
然后,应用程序应获取整个屏幕的屏幕截图,最后在没有用户任何帮助的情况下关闭错误消息.
为此,我尝试如下使用JDialog:
JOptionPane pane = new JOptionPane("Error message", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog("Error");
dialog.addWindowListener(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
Application.takeScreenshot();
dialog.setVisible(false);
我想知道是否有关闭它的特定方法.我查阅了文档,但似乎找不到.我试图找到有关SO的相关问题,但找不到解决我的问题的问题.
我想知道是否有一种方法可以获取窗口句柄,然后使用该窗口句柄将其关闭,或者只是向窗口发送“ CLOSE”或“ Press_ok”事件?
编辑:在我看来,当消息框显示时,代码似乎完全停止运行,好像有一个Thread.sleep(),直到用户手动关闭窗口为止.
如果可能,代码示例会有所帮助.
谢谢
解决方法:
尝试使用ScheduledExecutorService.就像是:
JDialog dialog = pane.createDialog("Error");
dialog.addWindowListener(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
ScheduledExecutorService sch = Executors.newSingleThreadScheduledExecutor();
sch.schedule(new Runnable() {
public void run() {
dialog.setVisible(false);
dialog.dispose();
}
}, 10, TimeUnit.SECONDS);
dialog.setVisible(true);
[编辑]
关于camickr注释,文档中没有提到在事件调度线程上执行ScheduledExedcutorService.因此最好使用swing.Timer
JDialog dialog = pane.createDialog("Error");
dialog.addWindowListener(null);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
Timer timer = new Timer(10000, new ActionListener() { // 10 sec
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
timer.start();
dialog.setVisible(true);