Java Keine Exceptions in Konsole sichtbar

Eggcake

Commodore
Registriert
Juni 2007
Beiträge
4.837
Hallöchen

Bei meiner Arbeit benutze ich ein kleines GUI, damit ich diverse funktionen etwas "händischer" testen kann. Ich habe zuvor selten etwas mit Swing gemacht, jedoch hatte ich dieses Problem noch nie:

Wenn ein Fehler auftritt (z.B. Nullpointer Exception) erscheint nun lediglich eine MessageBox (à la JOptionPane) wo der Fehler beschrieben wird. Der Titel der MessageBox trägt dabei den Namen der Exception (z.B. NoSuchElementException) und in der Message steht "An error occured, but no details are available".
Bei all meinen anderen Programmen die auf ein rudimentäres GUI setzten trat dies nie auf und die Exceptions waren ohne wenn und aber auf der Konsole ersichtlich. So nützt mir dies reichlich wenig und das Debuggen wird zur Qual da ich auf Anhieb keine Ahnung habe auf welcher Zeile die Exception geworfen wird.

Hat einer eine Idee an was das liegen könnte?
 
Warscheinlich wird irgendwo im Code eine generelle Fehlerbehandlung durchgeführt, also alle Exceptions (oder schlimmer: alle Throwable) gefangen und der Dialog angezeigt. Hast du denn den Sourcecode zur Hand? Dann kannst du mal nach einer solchen Stelle suchen und vor den Dialog ein printStackTrace einfügen (und vielleicht auch die Fehlermeldung verbessern).
 
Der Code ist insgesamt relativ lang und besteht aus mehreren Klassen. Eine generelle Fehlerbehandlung gibt's nicht.

Dabei fällt mir ein: kann es sein, dass es daran liegt, dass ich z.T. bei Methoden einfach "...throws IOException" geschrieben habe (wohl aus Faulheit) und dass dies dann so behandelt wird? Checke kurz alle try/catch-Blöcke und ersetze throws mit try-catch-Blöcken.
 
Ja genau, die try-catch-Blöcke brauchst du. Wie ja oben schon gesagt, musst du dann
phm666 schrieb:
[...]vor den Dialog ein printStackTrace einfügen (und vielleicht auch die Fehlermeldung verbessern).

Für den Fall dass du nicht weißt wie die genaue Syntax ist:
Code:
try{
//dein Code
}
catch (Exception ex){
ex.printStackTrace();
//und was du eben sonst noch abfangen willst
}
 
Die Syntax ist mir durchaus bekannt, try/catches hatte ich eigentlich überall aber jetzt fällt mir gerade etwas auf:

Das GUI habe ich im Rahmen eines Tutorials von geotools.org erstellt gehabt und direkt weiterverwendet. Der Code für die einzelnen Menüeinträge sieht so aus:
Code:
structureMenu.add(new SafeAction("Build Strokes") {
			public void action(ActionEvent e) throws Throwable {
				buildStrokes();
			}
		});
Was natürlich völliger Murks ist und wohl die Wurzel des Problems darstellt...ich glaube die SafeAction hatten die Devs beim Tutorial verwendet um eben die Try/Catch Blöcke zu umgehen welche die Lesbarkeit etwas verunstalten würden.

Edit: Jo, hab's nun doch gefunden. SafeAction ist eine Klasse der Devs von www.geotools.org welche von AbstractAction erbt und dort wird ActionPerformed überschrieben:
Code:
 @Override
    public void actionPerformed(ActionEvent e) {
        try {
            action( e );
        } catch (Throwable t) {
            JExceptionReporter.showDialog(t);
        }
    }
 
Zuletzt bearbeitet:
Zurück
Oben