Мне нужно создать JDialog или класс JFrame (это не имеет особого значения до тех пор, пока это графический интерфейс), который может быть использован в статической команде, вызываемой из обработчика actionPerformed (ActionEvent) и останавливается этот процесс до тех пор, пока пользователь не предоставит свой выбор из пользовательского интерфейса.
Очевидно, это возможно, потому что это именно то, что создает диалоги JOptionPane. Но когда я пытаюсь приостановить поток до тех пор, пока пользователь не завершит процесс выбора, интерфейс не будет отображаться должным образом.
Вот часть моего кода, с которой у меня возникают проблемы:
public static Results queryForResults(String message, int propertyOne,
int propertyTwo){
MyCustomDialog mcd = new MyCustomDialog(message, propertyOne,propertyTwo);
mcd.show();
// complete() is a boolean property of my MyCustomDialog class that turns
// true when the interface has been completed.
while(!mcd.complete()){
synchronized(mcd){
try{
mcd.wait(10000L);
} catch(InterruptedException e) {
e.printStackTrace();
return null;
}
}
}
mcd.dispose();
// My MyCustomDialog class has a getResults() property which returns
// a Results object (i.e. another custom class I've made to contain
// the selections made by the user.)
return mcd.getResults();
}
Появится внешний внешний диалог, но он не поддерживает. Кажется, что они выглядят как экранный захват того, что было на экране под диалогом, когда он появился. У меня создается впечатление, что это не работает, потому что я не должен останавливать поток Swing Event командой wait. Итак, как вы это делаете?
Нет необходимости в цикле while. modal JDialog
заставит выполнение останавливаться в вашем ActionLIstener, пока диалог не будет закрыт.
Кроме того, не используйте метод show() для отображения диалогового окна. Вы должны использовать метод setVisible(true)
.