(приведенный ниже пример кода является самодостаточным и работоспособным, вы можете попробовать, он не приведет к сбою вашей системы :)
Том Хотин прокомментировал вопрос здесь: Почему люди запускают графический интерфейс Java в очереди событий
тот:
Вряд ли EDT выйдет из строя. Непроверенные исключения, возникающие при отправке EDT, перехватываются, сбрасываются, и поток продолжается.
Может ли кто-нибудь объяснить мне, что здесь происходит (каждый раз, когда вы нажимаете кнопку «выбросить непроверенное исключение», специально выполняется деление на ноль):
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CrashEDT extends JFrame {
public static void main(String[] args) {
final CrashEDT frame = new CrashEDT();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing( WindowEvent e) {
System.exit(0);
}
});
final JButton jb = new JButton( "throw an unchecked exception" );
jb.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.out.println( "Thread ID:" + Thread.currentThread().getId() );
System.out.println( 0 / Math.abs(0) );
}
} );
frame.add( jb );
frame.setSize(300, 150);
frame.setVisible(true);
}
}
Я получаю следующее сообщение (чего и ожидал):
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: / by zero
и для меня это непроверенное исключение, верно?
Вы можете видеть, что идентификатор потока увеличивается каждый раз, когда вы запускаете сбой.
Таким образом, EDT автоматически перезапускается каждый раз, когда генерируется непроверенное исключение или когда непроверенное исключение "поймано, выгружено и поток продолжается", как прокомментировал Том Хотин?
Что здесь происходит?
EventDispatchThread.pumpOneEventForFilters
, в текущей реализации это сложно. Очевидно, разные реализации могут отличаться. Перед выходом из EDT, когда не было реализованных окон, по-видимому, всегда обнаруживались исключения. - person Tom Hawtin - tackline   schedule 11.06.2010