Я не знаю, что вызывает такое поведение, но в вашем коде просто не может быть правильным способом управления диалогами (подробнее ниже):
fileSelector.setVisible(true);
synchronized(this) {
try {
wait();
} catch(Exception e) {
e.printStackTrace();
}
}
fileSelector.dispose();
Хотите ли вы, чтобы ваши диалоги были модальными или нет?
Если вы хотите, чтобы они были модальными, тогда вы просто делаете блокирующий вызов, как при вызове JColorChooser.showDialog (...) метода, а возвращаемое «значение» - ваш цвет / файл /whatever.
Если вы хотите, чтобы они были немодальными, используйте обратный вызов, чтобы получить ваш цвет / файл. В примере с диалогом JColorChooser вы вызываете метод createDialog (...) и используете прослушиватели ok / cancel в качестве обратных вызовов.
Я предлагаю вам взглянуть на учебник Sun, например, на тему выбора цвета, чтобы увидеть, как правильно отображать модальное (или немодальное) диалоговое окно:
http://java.sun.com/docs/books/tutorial/uiswing/components/colorchooser.html
Еще раз, это синхронизировано (это) {попытка {wait () ...} для управления чем-то таким простым, как селектор файлов / диалоговое окно, просто не может быть правильным.