Трассировка стека как строка
Как получить полное сообщение исключения в Java?
Я создаю приложение Java. Если есть исключение во время выполнения, появится сообщение JDialog
с JTextArea
. Я попытался сделать исключение во время выполнения в своем приложении, но текстовая область, отображающая сообщение об исключении, выглядит следующим образом:
java.lang.ClassNotFoundException: com.app.Application
Однако я хочу, чтобы в моей текстовой области было что-то вроде:
![enter image description here]()
Вот часть моего кода, окруженная try
и catch
:
String ex = e.toString();
this.addText(ex);
Я пытался использовать e.getLocalizedMessage()
и e.getMessage()
, но ни одна из них не работает.
Ответы
Ответ 1
Вам нужно вызвать Throwable#printStackTrace(PrintWriter);
try{
}catch(Exception ex){
String message = getStackTrace(ex);
}
public static String getStackTrace(final Throwable throwable) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
return sw.getBuffer().toString();
}
Вы также можете использовать Commons-lang-2.2.jar библиотеку Apache Commons Lang, которая предоставляет эту функциональность:
public static String getStackTrace(Throwable throwable)
Gets the stack trace from a Throwable as a String.
ExceptionUtils # getStackTrace()
Ответ 2
Чтобы получить трассировку стека в строку, вы можете использовать следующие строки:
CharArrayWriter cw = new CharArrayWriter();
PrintWriter w = new PrintWriter(cw);
e.printStackTrace(w);
w.close();
String trace = cw.toString();
Ответ 3
если вы не используете какой-либо журнал (Log4j или oracle logger api), вы можете использовать оператор ниже для печати полного сообщения об исключении
try{
// statement which you want to monitor
}catch(Exception e){
e.printStackTrace()
// OR System.err.println(e.getStackTrace());
// OR System.err.println(e);
// OR System.err.println(e.getMessage());
// OR System.err.println(e.getCause());
}
если вы используете API-интерфейс Logger, используйте следующий оператор
try{
// statement which you want to monitor
}catch(Exception e){
log.error(e,e);
}
Ответ 4
Попробуйте e.printStackTrace()
, он будет печатать трассировку для вашего исключения с указанными строками
Ответ 5
e.printStackTrace даст полную трассировку стека
Ответ 6
Это полное сообщение об исключении.
Если вам нужна дополнительная информация, попробуйте e.printStackTrace()
то вы получите удовольствие, что видите на фотографии, которую вы публикуете
Ответ 7
public static String getStackMsg(Throwable e) {
StringBuffer sb = new StringBuffer();
sb.append(e.toString()).append("\n");
StackTraceElement[] stackArray = e.getStackTrace();
for(int i = 0; i < stackArray.length; ++i) {
StackTraceElement element = stackArray[i];
sb.append(element.toString() + "\n");
}
return sb.toString();
}