1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) throws Exception {
// On défini le traitement par défaut des exceptions non-traitées
// pour tous les threads (on peut redéfinir cela indépendamment pour chaque thread)
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
StringWriter writer = new StringWriter();
e.printStackTrace(new PrintWriter(writer));
final JScrollPane stacktrace = new JScrollPane(new JTextArea(writer.toString()));
stacktrace.setPreferredSize(new Dimension(200, 80));
stacktrace.setVisible(false);
final JCheckBox showStacktrace = new JCheckBox("Afficher le stacktrace");
showStacktrace.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stacktrace.setVisible(showStacktrace.isSelected());
SwingUtilities.windowForComponent(stacktrace).pack();
}
});
Object[] message = {
"Une erreur est survenue. Le programme va s'arrêter !",
"Veuillez contacter le service informatique.",
" ",
showStacktrace,
stacktrace
};
JOptionPane.showOptionDialog(null, message,
"Erreur dans le programme",
JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE,
null, null, null);
System.exit(1);
}
});
// ca plante !
throw new RuntimeException("badaboum !!!");
}
} |
Partager