Потому что showMessageDialog перехватывает на себя весь фокус и приостанавливает активность всего остального приложения. Плюшки свинга, вот такие. Обычно эти диалоги используют для ввода значений, и очень удобно писать это примерно так:
String input = JOptionPane.showInputDialog(<args...>);
Не надо никаких хандлеров, ничего - он сразу запишет нужное значение по нажатию кнопки OK.
Создавай отдельный фрейм и там добавляй JLabel.
[merge_posts_bbcode]Добавлено: 09.04.2014 01:49:09[/merge_posts_bbcode]
Или отдельным потоком запускай:
private void showMessage(String message) {
Thread t = new Thread {
public void run() {
JOptionPane.showMessageDialog(null, message);
}
});
}