Rastreio de pilha como cadeia

Como obtenho mensagem de exceção completa em Java?

Estou criando um aplicativo Java. Se houver uma exceção de tempo de execução, um JDialog com um JTextArea será JTextArea . Eu tentei fazer uma exceção de tempo de execução no meu aplicativo, mas a área de texto mostrando a mensagem de exceção se parece com isso:

 java.lang.ClassNotFoundException: com.app.Application 

No entanto, quero que minha área de texto mostre algo como:

insira a descrição da imagem aqui

Aqui está uma parte do meu código rodeado pelo try e catch :

 String ex = e.toString(); this.addText(ex); 

Eu tentei usar e.getLocalizedMessage() e e.getMessage() , mas nenhum desses trabalho.

Você precisa chamar o 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(); } 

Você também pode usar a biblioteca commons-lang-2.2.jar Apache Commons Lang que fornece essa funcionalidade:

 public static String getStackTrace(Throwable throwable) Gets the stack trace from a Throwable as a String. 

ExceptionUtils # getStackTrace ()

se você não estiver usando nenhum logger (log4j ou oracle logger api), então você pode usar a instrução abaixo para imprimir a mensagem de exceção completa

 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()); } 

Se você estiver usando a API do Agente de Log, use a declaração abaixo

 try{ // statement which you want to monitor }catch(Exception e){ log.error(e,e); } 

Para obter o rastreamento de pilha em uma string, você pode usar estas linhas:

  CharArrayWriter cw = new CharArrayWriter(); PrintWriter w = new PrintWriter(cw); e.printStackTrace(w); w.close(); String trace = cw.toString(); 

e.printStackTrace dará o rastreio completo da pilha

Tente e.printStackTrace() , ele irá imprimir o rastreamento para sua exceção com as linhas mencionadas

Esta é a mensagem de exceção completa.

Se você quiser mais informações, tente e.printStackTrace ()

então você vai obter exatamente o que você vê na foto que você postet

 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(); }