Alterar a saída das excessoes

8 respostas
cleiton_herrmann

Olá pessoal td blz?

Eu tava aqui pensando se existe uma maneira de alterar a saida das excessoes do java, por exemplo, quando eu rodo um programa pelo netbeans, e acontece alguma exception, o método printStackTrace() escreve ela na telinha de output do netbeans certo, eu queria fazer um jtextpane em meu programa pra imprimir nele as exceptions que possam ocorrer durante a execucao dele, dei uma pesquisada mas nao achei nd a respeito, e como to sem muito tempo resolvi perguntar…

Desde já grato, t+

8 Respostas

fiaux

Você exibir o stacktrace em algum lugar para o usuário?

X

Da sim, basta vc pegar o texto que ele gera...

o método é:

catch(Exception e){

// ai aqui vc cria o textpane e seta o texto algo parecido com....
textpane.setText(e.getMessage());
textpane.mostrar();
}
leoramos

Cara, isso é relativamente simples, até.
Trata as exceções (com um try / catch, normal, como você sempre fez), e usa o método getMessage() da exceção que você capturou.
Dá até pra você criar uma classe pra controlar isso e gravar em log, simples assim :wink:
Abraço!

T

e.getMessage() não é bom porque não mostra o stack trace completo. Em vez disso, crie uma rotina que chame e.printStackTrace e passe a ele uma StringWriter, se não me engano (estou sem o compilador Java aqui, portanto não tenho como lhe passar um exemplo compilado e corrigido.)

EDIT - você encapsula uma StringWriter em uma PrintWriter, e passa essa PrintWriter para e.printStackTrace. Uma vez que você obteve a mensagem, você usa o toString sobre o objeto StringWriter, para obter o valor da mensagem.

cleiton_herrmann

intaum pessoal, se fosse só pegar a mensagem da excessao blz, seria extremamente simples como vcs falaram…

eu até tava implementando uma classezinha aqui pra exibir o stacktrace da mesma maneira que o netbeans faiz, mais começou a ficar meio complicadinho porque como eu disse, quero fazer um negocio filézinho como o netbeans, dai eu quero mudar a cor das linhas de erro quando elas dizem respeito a uma classe do meu projeto(azul), e quando nao forem do meu projeto(marromzinho), mas eu tive que montar toda a saida, da seguinte maneira:

ste.getClassName() + "." + ste.getMethodName() + "(" + ste.getFileName() + ":" + ste.getLineNumber() + ")
onde ste é um StackTraceElement do array de StackTraceElements obtido na excessao, isso td num laço pra informação ficar organizada, mas dai ainda tem a causa da excessao e td mais, e se for pra arrumar td, vai dar um certo trabalho…

mas dai eu tava pensando, se eu conseguisse alterar o lugar onde o método printStackTrace imprime, quem sabe ja nao vem td organizadinho neh

tenderam? se tiver uma maneira mais facil de organizar as informações da exception, ou como eu disse, alterar o local onde ela é imprimida seria mais facil…

flw t+

T

Outra forma é redirecionar stderr (que é onde printStackTrace imprime os stack traces) com System.setErr.
De qualquer forma, você precisa encapsular uma StringWriter dentro de uma PrintStream nesse caso em particular.

cleiton_herrmann

blz era isso mesmo q eu tava querendo saber thingol, vou fazer aqui…

vlw pessoal t+

cleiton_herrmann

blz thingol, vlw o edit ai, eu estava com dificuldades pra acertar o objeto a ser passado pro PrintWriter, primeira vez q to usando essas classes…

blz agora fico filé, ele imprime no meu jtextpane certinho q neim o netbeans, só q sem as cores, tentei mudar o contentType do JTextPane pra text/rtf mas nao adiantou, dai neim imprimiu nd, será q eu vou ter q setar as cores das linhas manualmente???

vlw t+

Criado 25 de julho de 2008
Ultima resposta 25 de jul. de 2008
Respostas 8
Participantes 5