(il codice di esempio riportato di seguito è a sé stante e eseguibile, si può provare, che non vada in crash il sistema :)L'EDT si riavvia o no quando viene generata un'eccezione?
Tom Hawtin ha commentato sulla questione qui: Why do people run Java GUI's on the Event Queue
che:
È improbabile che l'EDT si blocchi. Le eccezioni non controllate generate nel messaggio EDT vengono catturate, scaricate e il thread continua.
Qualcuno mi può spiegare cosa sta succedendo qui (ogni volta che si fa clic sul "un'eccezione unchecked" pulsante, viene eseguita una divisione per zero, apposta):
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 il seguente messaggio (che è quello che ci si aspetta):
Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero
e per me questa è un'eccezione incontrollato giusto?
È possibile notare che l'ID del thread viene incrementato ogni volta che si attiva l'arresto anomalo.
Quindi l'EDT viene riavviato automaticamente ogni volta che viene emessa un'eccezione non controllata o sono le eccezioni non selezionate "rilevato, scaricato e il thread continua" come ha commentato Tom Hawtin?
Cosa sta succedendo qui?
Un'interessante nota a margine su una questione completamente diversa: non è necessario eseguire Math.abs (0) per "ingannare" il compilatore per accettarlo. 0/0 è un'espressione ok e genererà anche l'eccezione. [leggi di più ...] (http: // StackOverflow.it/questions/2934063/is-1-0-a-legal-java-expression) – aioobe
@aioobe: lui lui, lo so, lo so, ho letto quella discussione ... Ma se avesse scritto 0/0 o 1/0 allora la gente avrebbe chiesto che quella cosa fosse anche compilando :) – NoozNooz42
hahaha ... buon punto :-) – aioobe