2013-06-02 1 views
0

У меня есть программа, над которой я работаю, которая должна облегчать создание текстурных карт, позволяя редактировать отдельные текстуры на карте. У меня есть несколько мест, где я использую 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 заморожен.

+0

Сделайте свой диалог модальным. Приложение прекратит обработку, пока диалог не будет закрыт. – camickr

+0

Ох. Благодаря! Lol .. Сделайте это, и я приму это. –

ответ

4

Сделайте свой диалог модальным. Ваше приложение прекратит обработку до тех пор, пока диалог не будет закрыт.

0

Почему этот поддельный карусель? Просто удалите диалог в слушателе.

+0

Я пробовал это, поверь мне .. Когда я это сделаю, он также замерзает. Все, что я вижу, это то, что он попадает на метод dispose. Это был единственный способ найти, что это сработает. –