У меня есть программа, над которой я работаю, которая должна облегчать создание текстурных карт, позволяя редактировать отдельные текстуры на карте. У меня есть несколько мест, где я использую JDialog для таких вещей, как ввод размера плитки карты, начальный размер новой карты и тот, у которого просто есть кнопка, на которую пользователь нажимает, когда он или она закончили редактирование выбранные текстуры с внешней программой (например, фотошоп или краска). Однако, в любое время, когда один из этих JDialog заканчивается, если программа теряет фокус, она становится полностью невосприимчивой. Вот мой код 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 заморожен.
Сделайте свой диалог модальным. Приложение прекратит обработку, пока диалог не будет закрыт. – camickr
Ох. Благодаря! Lol .. Сделайте это, и я приму это. –