2016-12-07 2 views
0

Ich möchte eine generalisierte Ausnahmebehandlung in meinem Programm machen. Es sollte eine JOptionPane.showMessageDialog(null, "There was an unexpected Exception: "); diese anzeigen. Jetzt möchte ich auch die notwendigen Informationen zum Dialog hinzufügen. Ich weiß, wie man den Typ der Ausnahme bekommt (e.getClass();), aber gibt es eine Möglichkeit, nur die Information zu bekommen, welche Klasse/Methode und welche Zeile?Wie bekomme ich nur die notwendigen Informationen von einer Ausnahme?

Beispiel für die Ausnahme: at com.mainfirst.bloomberg.invoice.report.Etst.main(Etst.java:35)

Ich möchte nur in den Klammern die Rolle bekommen. Ich versuchte Thread.currentThread().getStackTrace()[2].getLineNumber(), was ich in einem similar question fand, aber das gab null zurück, so versuchte ich mit anderen Indizes und Index 1 gibt die Linie zurück, die die Thread.currentThread()... geschrieben wird. Gibt es Weise, die Informationen wiederzubekommen, die ich brauche?

+0

Warum guckst du nicht auf eine andere Antwort auf die ähnliche Frage? –

+0

Ich habe und trotzdem bekomme ich nicht die richtige Information – Aelop

+0

Mögliche Duplikate von [Wie können wir Zeilennummern in das Protokoll in Java drucken] (http://stackoverflow.com/questions/115008/how-can-we-print -line-numbers-to-the-log-in-java) –

Antwort

0

aber zurück null, so habe ich versucht, mit anderen Indizes und Index 1 die Zeile gibt die Thread.currentThread() ... wird in

geschrieben

Es ist, weil Sie Thema verwenden. currentThread(). getStackTrace() nicht e.getStackTrace(). aufgetreten ist, neben Indizes zeigt auf äußere Methoden in der Kette

try{ 
    method(); 
} 
catch(Exception e){ 
    e.getStackTrace()[0].getLineNumber(); 
    e.getStackTrace()[0].getFileName(); 
    e.getStackTrace()[0].getMethodName(); 
} 

Es wird die Zeilennummer Ausnahme drucken: Holen Sie sich die Zeilennummer wie so.

+0

Dank dieser erhalten Sie mir die Zeilennummer. Weißt du auch, wie ich den Ort wie Datei/Methode bekommen kann? – Aelop

+0

können Sie andere Methoden auf * StackTraceElement * verwenden, um weitere Informationen zu erhalten. Bearbeitete die Antwort. –

+0

ja schon von mir selbst herausgefunden, aber trotzdem danke – Aelop

0
Pattern p = Pattern.compile("/\([\w\W]*\)/"); 
Matcher m = p.matcher(e.printStackTrace()); 

JOptionPane.showMessageDialog(null, "There was an unexpected Exception: "+m.group(1)) 

EDIT:

Verwendung e.getStackTrace() statt e.printStackTrace(), so dass Sie die Ausnahmemeldung als String bekommen.

Verwenden Sie m.group (0) anstelle von m.group (1), um die gesamte Regex abzugleichen. In diesem Fall würde es den gleichen Effekt haben, aber wenn Sie mehr Gruppen in der Regex hätten, hätten Sie auswählen können, welche Gruppe übereinstimmen soll.

Diese spezifische Regex stimmt nur mit dem ersten Vorkommen überein, da es am Ende keinen/g Modifikator gibt.

+0

Ich bin nicht sehr mit Matcher.group-Methode verwendet. Gibt dies nur das erste übereinstimmende Ergebnis zurück? auch dieser Code funktioniert nicht, weil 'e.printStackTrace()' eine Void-Methode und keine Zeichenkette ist – Aelop

+0

Obwohl dies das Problem lösen könnte, sollte man immer eine Erklärung hinzufügen. – BDL

+0

Bearbeitet mit Erklärung und Code beheben –

Verwandte Themen