Try..catch

Não consigo pegar a exceção e mostrar a mensagem erro. É um campo que não aceita letras.

O erro:
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “a”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at AreaGrafica$HandLerButton.actionPerformed(AreaGrafica.java:99)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6134)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5899)
at java.awt.Container.processEvent(Container.java:2023)
at java.awt.Component.dispatchEventImpl(Component.java:4501)
at java.awt.Container.dispatchEventImpl(Container.java:2081)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
at java.awt.Container.dispatchEventImpl(Container.java:2067)
at java.awt.Window.dispatchEventImpl(Window.java:2458)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Meu codigo:

[code]
private void desenha(){
try{
painelDeDesenho.setY2(Integer.parseInt(campo1.getText()));
}
catch(NumberFormatException e) {
JOptionPane.showMessageDialog(null, “Este campo não permite a entrada de letras!”);
}
painelDeDesenho.setY1(0);
painelDeDesenho.setX1(40);
painelDeDesenho.setX2(40);

    painelDeDesenho.setYb2(Integer.parseInt(campo2.getText()));
    painelDeDesenho.setYb1(0);
    painelDeDesenho.setXb1(120);
    painelDeDesenho.setXb2(40);

    painelDeDesenho.repaint();
    }[/code]

Se alguem puder me ajudar

Boa noite.

Você utiliza o parseInt em dois momentos, provavél que o segundo momento também esteja ocorrando NumberFormatException, o que faz com que o seu tratamento não seja adequado. Utilize o tratamento para todos os campos que desejar efetuar um parser, ou seja, dentro do bloco try-catch todos os campos que efetuem parser.

Abraços! :slight_smile:

vc deve ta usando Exception para todas as excecoes, lembre-se que deve ter catch especificos, ter exception para tudo nao eh uma boa pratica. Principalmente nesse caso que vc sabe que pode ter uma excecao claramente. altere seu catch e trate a excecao.

abraco,

LPJava, na verdade o código dele trata correto, concorda?

try{ painelDeDesenho.setY2(Integer.parseInt(campo1.getText())); } catch(NumberFormatException e) { JOptionPane.showMessageDialog(null, "Este campo não permite a entrada de letras!"); }

Provavél é que mais alguma linha tenha ocorrido a excessão e não esteja sendo tratada.

Tente assim, pelo menos poderá encontrar a linha do erro.


    private void desenha(){  
        try{  
        painelDeDesenho.setY2(Integer.parseInt(campo1.getText()));  

        painelDeDesenho.setY1(0);  
        painelDeDesenho.setX1(40);  
        painelDeDesenho.setX2(40);  
     
        painelDeDesenho.setYb2(Integer.parseInt(campo2.getText()));  
        painelDeDesenho.setYb1(0);  
        painelDeDesenho.setXb1(120);  
        painelDeDesenho.setXb2(40);  
     
        painelDeDesenho.repaint();  
        }  
        catch(Exception e) {  
               JOptionPane.showMessageDialog(null, "Este campo não permite a entrada de letras!");  
        }   

Muito obrigada!

Consegui resolver!

Era isso e mais uma exceção no código!

oi pessoall!

Agora quero tratar além de letras números negativos. O estranho é que ele não verifica quando digito numeros negativos. Mas quando digito letras funciona direitinho.
Alguem consegue achar o meu erro?

Obrigada!

[code]private void desenha(){
try{
painelDeDesenho.setY2(Integer.parseInt(campo1.getText()));

    painelDeDesenho.setY1(0);
    painelDeDesenho.setX1(40);
    painelDeDesenho.setX2(40);

    painelDeDesenho.setYb2(Integer.parseInt(campo2.getText()));
    painelDeDesenho.setYb1(0);
    painelDeDesenho.setXb1(120);
    painelDeDesenho.setXb2(40);

    painelDeDesenho.repaint();
     }
    catch(NumberFormatException e) {
           JOptionPane.showMessageDialog(null, " Este campo não permite a entrada da letras! "+ e.getMessage());
     }
     catch(Exception e){
           y1= Integer.parseInt(campo1.getText());
           yb1= Integer.parseInt(campo2.getText());
             if (y1<= -1){
           JOptionPane.showMessageDialog(null, "O valor digitado não pode ser negativo!" );
            }if (yb1<=-1){
                JOptionPane.showMessageDialog(null, "O valor digitado não pode ser negativo!");
             }
            else{
               return;
      }

    }
}
[/code]

Quando introduzes números negativos não ocorre qualquer excepção pelo que nunca é executada a parte do catch. Essa parte do código deve estar no try.

Era isso mesmo!
Agora funcionou!

Jo, se o seu problema foi resolvido, poste [RESOLVIDO] ao lado do seu post.

Abraços! :slight_smile:

está funcionando!