(el código de ejemplo a continuación es autónomo y ejecutable, se puede probar, no va a bloquear el sistema :)¿El EDT se reinicia o no cuando se lanza una excepción?
Tom Hawtin comentado en la pregunta aquí: Why do people run Java GUI's on the Event Queue
que:
Es poco probable que se bloquee el EDT. Las excepciones no verificadas arrojadas en el despacho de EDT son capturadas, abandonadas y el hilo continúa.
Alguien me puede explicar lo que está pasando aquí (cada vez que se hace clic en el "una excepción sin control" botón, se realiza una división por cero, a propósito):
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);
}
}
I obtendrá el siguiente mensaje (que es lo que cabe esperar):
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero
y para mí esto es una excepción no comprobada verdad?
Puede ver que la identificación del subproceso se incrementa cada vez que desencadena el bloqueo.
Entonces, ¿el EDT se reinicia automáticamente cada vez que se lanza una excepción sin marcar o están desmarcadas las excepciones "atrapado, vaciado y el hilo continúa" como comentó Tom Hawtin?
lo que está pasando aquí?
Una nota al margen interesante sobre una cuestión completamente diferente: no tiene que hacer Math.abs (0) para "engañar" al compilador para que lo acepte. 0/0 es una expresión aceptable y arrojará la excepción. [más información ...] (http: // stackoverflow.com/questions/2934063/is-1-0-a-legal-java-expression) – aioobe
@aioobe: he he, lo sé, lo sé, he leído esa discusión ... Pero si hubiera escrito 0/0 o 1/0 entonces la gente habría preguntado si eso estaba compilando :) – NoozNooz42
jajaja ... buen punto :-) – aioobe