在不停止执行流程的情况下显示“JOptionPane.showMessageDialog”
问题描述:
我目前正在研究的项目变得比我原本想象的要复杂。我现在要做的就是显示一个消息对话框,而不停止程序中主线程的执行。现在,我使用的是:在不停止执行流程的情况下显示“JOptionPane.showMessageDialog”
JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE);
但是,这一切都暂停在主线程否则,这样就不会同时显示多个对话框,对方后刚上。这个m =可以像创建一个新的JFrame而不是使用JOptionPane一样简单吗?
答
按照docs:
JOptionPane的创建是模态JDialogs。要创建一个非模态对话框,您必须直接使用JDialog类。
上面的链接显示了创建对话框的一些示例。其他
一种选择是启动的JOptionPane在自己的线程是这样的:
Thread t = new Thread(new Runnable(){
public void run(){
JOptionPane.showMessageDialog(null, "Hello");
}
});
t.start();
这样,你的程序的主线程继续即使模态对话框就到了。
答
您可以启动单独的Runnable
来显示对话框并处理响应。
答
试试这个:
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
JOptionPane op = new JOptionPane("Hi..",JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = op.createDialog("Break");
dialog.setAlwaysOnTop(true);
dialog.setModal(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
}
});
OP:小心通过JOptionPane的创建,以及虽然对话的方式,如果你弹出多个对话框,然后你真的希望他们是模式? – iainmcgin 2011-03-26 11:07:08
感谢iainmcgin。我真的没有想到这一点。我没有使用“JOptionPane.showMessageDialog”,而是创建了一个显示消息的新JFrame。 – Brandon 2011-03-26 22:14:13
小心点。 http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice – user2228462 2013-05-25 13:41:05