JDialog冻结失焦?

时间:2013-06-02 22:03:13

标签: java swing user-interface jdialog

我有一个我正在研究的程序,它可以通过允许你在地图中编辑单个纹理来促进纹理贴图的制作。我有几个地方,我使用JDialog的东西,如地图的瓷砖大小的输入,新地图的初始大小,以及一个只有一个按钮,用户在他或她完成编辑后按下使用外部程序(例如photoshop或paint)选择纹理。但是,每当这些JDialog中的一个启动时,如果程序失去焦点,它就会完全没有响应。这是我在外部编辑选定纹理时弹出的JDialog代码:

JDialog editing = new JDialog(mainFrame, "Externally Editing");//mainFrame is the name of the JFrame containing everything.
JPanel pnl = new JPanel();
editing.setLayout(new BorderLayout());
pnl.setPreferredSize(new Dimension(150, 60));
editing.add(pnl);
editing.pack();
JButton button = new JButton("Done Editing");
button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        editng = false;//Obviously, a boolean that I have outside of this method.
    }
});
pnl.add(button);
Thread.sleep(100);
editing.setVisible(true);
while(editng){System.out.print("");}//Doing nothing while the user is externally editing.. Unfortunately, if I don't have "System.out.print("");" it doesn't work.. Oh, Java..
new Thread(new Runnable(){public void run(){editing.dispose();}}).start();//Gotta dispose of it in a separate thread since AWT isn't Thread-safe... Ugh..

我会假设它在AWT线程中冻结了它为JDialog创建/拥有的,而我的线程只是等待按下按钮..由于JDialog被冻结,所以不会发生。

2 个答案:

答案 0 :(得分:4)

使你的对话模态化。您的应用程序将停止处理,直到对话框关闭

答案 1 :(得分:0)

为什么这个虚假的回旋?只需将对话框置于监听器中即可。