(приведенный ниже примерный код является самодостаточным и выполнимым, вы можете попробовать его, это не приведет к сбою вашей системы:)
Tom Hawtin прокомментировал здесь вопрос: Почему люди запускают графический интерфейс 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 автоматически перезапускается каждый раз, когда выбрано исключенное исключение или исключены исключения "пойманы, сброшены и поток продолжается", как прокомментировал Том Хотин?
Что здесь происходит?