Caixa de mensagem com detalhes do erro

4 respostas
gilberto_oliveira

Olá pessoal,

Queria saber se dá pra fazer uma caixa de diálogo personalizada (tipo showMessageDialog).
Mas eu queria que ela tivesse 2 botões (e uma figurinha de erro clarro :D):

botão OK
botão Detalhes>>

O botão OK, fecha o diálogo.
O botão Detalhes>> , exibe abaixo do nome do erro, a stack trace.(somente para o caso de o usuário clicar neste botão)

Alguém sabe? Será que é útil?

4 Respostas

T

É claro que dá; é só criar um JDialog com esses botões e tomar um pouco de cuidado, porque você terá de mudar o tamanho do JDialog quando clicar o botão "Detalhes >>" (que quando estiver ativo, é óbvio, vai ficar com o texto "Detalhes <<". )
É muito útil - ponha o stack trace. Exemplo:

try {
    alguma coisa que pode dar pau e que não vou conseguir tratar;
} catch (....) {
} catch (....) {
} catch (Throwable thr) {
    (new MinhaMensagemDesesperada (thr)).setVisible (true);
}
gilberto_oliveira

Thingol, obrigado.

Mas não entendi bem o seu código.

Pensei em fazer assim: a classe DialogoErro (JDialog) ia se virar com a Exception que eu estou passando.

public static void main(String args[]){ // aqui eu faço a aplicação falhar try{ double f = Double.parseDouble("1,8"); }catch(Exception e){ new DialogoErro(null,true,"titulo","mensagem", e); } }

A classe do Dialogo é essa:

private Exception e;
//Construtor
public DialogoErro(java.awt.Frame parent, boolean modal, String title, String message, Exception e) {
        super(parent, modal);
        initComponents();
        setTitle(title);
        labelMensagem.setText(message);
        setVisible(true);
        this.e = e; //aqui ele seta a exception que recebe para que os outros métodos possam "enxergar"
}
//quando o botão detalhes é clicado
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
	String texto = "";
	StackTraceElement[] pilha = e.getStackTrace();	
    	texto += e.getMessage()+"\n";
    	
    	for(StackTraceElement elemento : pilha){
    			texto += elemento + "\n";
    	}
//não fiz ainda esta parte, coloquei provisoriamente          
	JOptionPane.showMessageDialog(null,texto);
    }

Mas tá dando este erro:

Exception occurred during event dispatching:
java.lang.NullPointerException
        at DialogoErro.jButton2ActionPerformed(DialogoErro.java:110)
        at DialogoErro.access$100(DialogoErro.java:13)
        at DialogoErro$2.actionPerformed(DialogoErro.java:61)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.Dialog$1.run(Unknown Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
T

Perdão - onde fica a tal linha 110 que dá o “null pointer exception”?

gilberto_oliveira

Linha 110:

StackTraceElement[] pilha = e.getStackTrace();
Criado 1 de fevereiro de 2008
Ultima resposta 1 de fev. de 2008
Respostas 4
Participantes 2