Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread

nicco80

Mitglied
Hi,
zunächst mal ein dickes Lob an das gute Forum, ich habe schon oft Dinge hier gefunden die mir weiterhalfen. - Jetzt hab mich mir auch mal einen Account besorgt, und hier kommt auch schon das Problem;

Ich möchte einen ExceptionHandler implementieren, der in einer Swing-Applikation einen Dialog öffnet in der die Fehlermeldung beschrieben ist und im zweiten Schritt nach Benutzerbestätigung eine Nachricht an mich als Entwickler verschickt wird.
Dazu hab ich das hier gemacht:
Java:
		Thread.setDefaultUncaughtExceptionHandler(exceptionReporter);
Und nach Recherche auch die laufenden Threads enumeriert, wie hier empfohlen: Listing All Running Threads | Example Depot
dort dann im Thread-Visitor per
Java:
thread.setUncaughtExceptionHandler(exceptionReporter);
ebenfalls den Handler gesetzt.
Wenn ich nun eine Beispiel-Exception werfe (aus actionPerformed eines Buttons, also dem AWT-EventDispatcher), so wird der Handler leider nicht aufgerufen.

Wenn ich durch den Thread-Visitor debugge so finde ich den AWT-EventDispatcher vor, nach dieser Doku zu urteilen müsste das doch funktionieren, oder ?
How uncaught exceptions are handled in Java

Möglicherweise muss man anders herangehen, hat jemand sowas schon mal implementiert gesehen?
Für Hinweise und Vorschläge bin ich dankbar, immer her damit :)
grüsse nicco
 

Wildcard

Top Contributor
Und nach Recherche auch die laufenden Threads enumeriert, wie hier empfohlen: Listing All Running Threads | Example Depot
dort dann im Thread-Visitor per
Java:
thread.setUncaughtExceptionHandler(exceptionReporter);
ebenfalls den Handler gesetzt.
Wann tust du das denn? Vermutlich war der EDT noch gar nicht gestartet und bekommt daher auch keinen UncaughtExceptionHandler zugewiesen. Sollte sich im Debugger leicht nachprüfen lassen...
Dir sollte auch klar sein das ein UncaughtExceptionHandler das Verhalten des Event Processings verändert. Wenn dir das egal ist, dann vergiss das ich es erwähnt habe... ;)
 

nicco80

Mitglied
Hi,
Wann tust du das denn? Vermutlich war der EDT noch gar nicht gestartet und bekommt daher auch keinen UncaughtExceptionHandler zugewiesen. Sollte sich im Debugger leicht nachprüfen lassen...
Ja oft ist es aus der IDE schnell erkannt, ich habe trotzdem alles kurz zusammengefasst in der Datei "ExceptionTest.java", die Registrierung des Handlers klappt so wie unten vorgenommen nicht :autsch:

Ich habe sowas schonmal für die .net clr gemacht, weshalb ich vermute das ich etwas übersehen habe. So haben wir wenigstens ein Codeschnipsel zum dran rumschrauben.

Wie gesagt, was ich möglichst erreichen möchte, ist jede Exception abfangen um sie zu verarbeiten vielleicht bin ich da mit diesem Ansatz auf dem Holzweg - haben meine Recherchen so ergeben.. :bahnhof:
Danke, grüsse nicco

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

final class ExceptionReporting implements Thread.UncaughtExceptionHandler
{
	private ExceptionReporting() 
	{
	}
	
	private static ExceptionReporting exceptionReporter;
	
	/**
	 * Sets up a default handler for uncaught exceptions
	 * @param useGui
	 */
	public static synchronized void registerExceptionReporter()
	{
		if (exceptionReporter != null) {
			exceptionReporter = new ExceptionReporting();
		}

		Thread.setDefaultUncaughtExceptionHandler(exceptionReporter);

		ThreadGroup root = Thread.currentThread().getThreadGroup().getParent(); 
		while (root.getParent() != null) 
		{ 
			root = root.getParent(); 
		} 

		// Visit each thread group 
		visit(root, 0, exceptionReporter); 
	}

	// This method recursively visits all thread groups under `group'. 
	public static void visit(ThreadGroup group, int level, ExceptionReporting exceptionReporter) 
	{ 
		// Get threads in `group' 
		int numThreads = group.activeCount(); 
		Thread[] threads = new Thread[numThreads*2]; 
		numThreads = group.enumerate(threads, false); 
		
		// Enumerate each thread in `group' 
		for (int i=0; i<numThreads; i++) { // Get thread 
			Thread thread = threads[i]; 
			thread.setUncaughtExceptionHandler(exceptionReporter);
		} 
		
		// Get thread subgroups of `group' 
		int numGroups = group.activeGroupCount(); 
		ThreadGroup[] groups = new ThreadGroup[numGroups*2]; 
		numGroups = group.enumerate(groups, false); 
		
		// Recursively visit each subgroup 
		for (int i=0; i<numGroups; i++) { 
			visit(groups[i], level+1, exceptionReporter); 
		} 
	} 
	
	/**
	 * Catches exceptions and notifies the server service
	 */
	public void uncaughtException(Thread t, Throwable e) 
	{
		JOptionPane.showMessageDialog(
				null, e.getMessage(), 
				"Exception occurred",
				JOptionPane.ERROR_MESSAGE);
	}
	
}

public class ExceptionTest 
{
	public static void main(String[] args)
	{
		//too early: ExceptionReporting.registerExceptionReporter();
		
		new ExceptionTest();
	}
	
	public ExceptionTest()
	{
		JFrame jFrame = new JFrame();
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//too early either: ExceptionReporting.registerExceptionReporter();
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run()
			{ //does not work as well:
				ExceptionReporting.registerExceptionReporter();
			}
		});
		
		JButton button = new JButton("Create Exception from EDT");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				throw new RuntimeException("Test Exception");
				//throw new OutOfMemoryError("Test Exception");
			}
		});
		
		jFrame.getContentPane().add(button);
		jFrame.setVisible(true);
	}
}
 

nicco80

Mitglied
Ähm Nachtrag, mir ist da ein Fehler unterlaufen...

[JAVA=22]
if (exceptionReporter == null) {
exceptionReporter = new ExceptionReporting();
}
[/code]

:oops:

Kein Wunder dass es nicht funktionierte das passiert manchmal
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Exception: java.lang.ClassCastException AWT, Swing, JavaFX & SWT 2
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
Z JavaFX Exception in Application start method AWT, Swing, JavaFX & SWT 2
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
B JavaFX Warum wird hier eine NullPointer-Exception geworfen? AWT, Swing, JavaFX & SWT 7
R AWT no such child Exception AWT, Swing, JavaFX & SWT 7
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
W JavaFX Warum kriege ich eine Exception? AWT, Swing, JavaFX & SWT 23
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L JavaFX JavaFX stürtzt durch einen Server#connect Exception AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Exception Message von Model Class via Controller in View darstellen AWT, Swing, JavaFX & SWT 39
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
S java.fxml.load.exception und keine automatische Aktualliseriung der Mainausgabe AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Exception in der Eventqueue AWT, Swing, JavaFX & SWT 8
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
H JavaFX Ein View vorschalten Exception AWT, Swing, JavaFX & SWT 7
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
M 3D-Grafik Mac Java 3D in Eclipse Exception AWT, Swing, JavaFX & SWT 0
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
I Opencv Imgproc.floodfill exception AWT, Swing, JavaFX & SWT 1
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
T Gui Exception AWT, Swing, JavaFX & SWT 2
X Auf Fensterklasse zugreifen (Nullpointer Exception) AWT, Swing, JavaFX & SWT 2
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
N Swing Exception: Comparison method violates its general contract! AWT, Swing, JavaFX & SWT 13
S Exception bei BufferStrategy AWT, Swing, JavaFX & SWT 8
H Swing Exception's und MVC AWT, Swing, JavaFX & SWT 35
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
K AWT DataBuffer in DataBufferInt Exception AWT, Swing, JavaFX & SWT 2
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
O Immer Exception in AWT-EventQueue-0 AWT, Swing, JavaFX & SWT 5
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
F Swing Seltsame Exception AWT, Swing, JavaFX & SWT 5
R Swing Files auflisten (JButton, JList, Exception) AWT, Swing, JavaFX & SWT 4
V LookAndFeel Nullpoint Exception AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
hdi SWT Zwei mal Shell öffnen = Exception AWT, Swing, JavaFX & SWT 6
O Probleme beim Zeichnen und AWT-Event-Queue-0 Exception AWT, Swing, JavaFX & SWT 5
O Exception bei repaint AWT, Swing, JavaFX & SWT 3
D Bild zeichnen lassen aus array, null pointer Exception AWT, Swing, JavaFX & SWT 2
B JTable ValueChanged verursacht Exception AWT, Swing, JavaFX & SWT 3
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
Daniel_L JTable, (Auto-)RowSorter und NullPointer-Exception AWT, Swing, JavaFX & SWT 6
M Exception in eine JTextArea anzeigen AWT, Swing, JavaFX & SWT 7
T Exception: Adding a window to a container AWT, Swing, JavaFX & SWT 14
G Kann mir jemand diese Exception erklaeren? AWT, Swing, JavaFX & SWT 8
T AWT Exception AWT, Swing, JavaFX & SWT 5
A Exception beim LineWrapping AWT, Swing, JavaFX & SWT 16
P Für mich unverständliche Exception AWT, Swing, JavaFX & SWT 3
N JList - Nullpointer Exception AWT, Swing, JavaFX & SWT 4
Lony AbstractTableModel Exception in thread "AWT-EventQueue- AWT, Swing, JavaFX & SWT 3
T Warum schmeißt das eine Exception? AWT, Swing, JavaFX & SWT 6
I EventDispatchThread Exception AWT, Swing, JavaFX & SWT 5
M Problem: "ArrayIndexOutOfBounds Exception" AWT, Swing, JavaFX & SWT 11
C Out of Bounds Exception, Array of JTextField AWT, Swing, JavaFX & SWT 6
B JTable Vector Exception bei eigenem CellEditor AWT, Swing, JavaFX & SWT 3
D Seltsame AWT-Exception AWT, Swing, JavaFX & SWT 2
M Button und Exception mit NetBeans AWT, Swing, JavaFX & SWT 3
P paint null pointer exception AWT, Swing, JavaFX & SWT 3
M Exception Meldung aus Thread an jTextField1 übergeben AWT, Swing, JavaFX & SWT 6
A Null pointer exception beim Neuzeichnen AWT, Swing, JavaFX & SWT 4
R DataVector bei TableModel - Class Cast Exception AWT, Swing, JavaFX & SWT 9
G Drag & Drop bzw. Data Transfer - Exception nach Drag AWT, Swing, JavaFX & SWT 1
K Exception mit "Unknown Source" AWT, Swing, JavaFX & SWT 5
Z jar-File mit SWT - Exception AWT, Swing, JavaFX & SWT 4
F Habe Problem mit dem Abfangen einer Exception AWT, Swing, JavaFX & SWT 10
V Null Pointer Exception bei JTextField setText AWT, Swing, JavaFX & SWT 25
T Programm funkt. nicht - Exception AWT, Swing, JavaFX & SWT 7
A Exception in thread "AWT-EventQueue-0" java.lang.N AWT, Swing, JavaFX & SWT 4
G Exception in JList oder JTextArea AWT, Swing, JavaFX & SWT 9
M java headless exception AWT, Swing, JavaFX & SWT 5
O Exception abfangen AWT, Swing, JavaFX & SWT 19
K GUI - Behandlung von Ereignissausgaben AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben