我正在创建一个应用程序,我在其中测试一定数量的界面功能,当发生错误时,我想要显示一条错误消息。
然后应用程序应截取整个屏幕的屏幕截图,最后在没有用户帮助的情况下关闭错误消息。
为此,我尝试使用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(),直到用户手动关闭窗口。
如果可能,代码示例会有所帮助。
由于
答案 0 :(得分:3)
尝试使用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);
答案 1 :(得分:1)
我设法解决了这个问题。似乎默认情况下,JDialog是Modal,这意味着它会中断其他所有内容,直到用户关闭它为止。为了解决这个问题,我使用了以下方法:
dialog.setModalityType(Dialog.ModalityType.MODELESS);
当它处于活动状态时,一个简单的.setVisible(false);足够。 无论如何感谢帮助抱歉创建一个不必要的问题,但我已经在它几个小时,直到我找到它。希望它可以帮助别人。