2011-03-26 111 views
6

我目前正在研究的项目变得比我原本想象的要复杂。我现在要做的就是显示一个消息对话框,而不停止程序中主线程的执行。现在,我使用的是:在不停止执行流程的情况下显示“JOptionPane.showMessageDialog”

JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE); 

但是,这一切都暂停在主线程否则,这样就不会同时显示多个对话框,对方后刚上。这个m =可以像创建一个新的JFrame而不是使用JOptionPane一样简单吗?

回答

10

按照docs

JOptionPane的创建是模态JDialogs。要创建一个非模态对话框,您必须直接使用JDialog类。

上面的链接显示了创建对话框的一些示例。其他


一种选择是启动的JOptionPane在自己的线程是这样的:

Thread t = new Thread(new Runnable(){ 
     public void run(){ 
      JOptionPane.showMessageDialog(null, "Hello"); 
     } 
    }); 
    t.start(); 

这样,你的程序的主线程继续即使模态对话框就到了。

+0

OP:小心通过JOptionPane的创建,以及虽然对话的方式,如果你弹出多个对话框,然后你真的希望他们是模式? – iainmcgin 2011-03-26 11:07:08

+0

感谢iainmcgin。我真的没有想到这一点。我没有使用“JOptionPane.showMessageDialog”,而是创建了一个显示消息的新JFrame。 – Brandon 2011-03-26 22:14:13

+0

小心点。 http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice – user2228462 2013-05-25 13:41:05

0

您可以启动单独的Runnable来显示对话框并处理响应。

0

试试这个:

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); 
         } 
        }); 
相关问题