Joptionpane - Error cancel button

Asked

Viewed 990 times

0

I’m developing an ATM system by JFrame, however when I use a JOptionPane, when I click the button cancel it appears some errors in the Eclipse console.

Follow the mistakes below:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at CaixaEletronico.CaixaEletronico.sacar(CaixaEletronico.java:150)
    at CaixaEletronico.GUI$2.actionPerformed(GUI.java:66)
    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 Source)
    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.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(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) 

The code:

do {
    valorTotal = ((caixa[0][1]*100)+(caixa[1][1]*50)+(caixa[2][1]*20)+(caixa[3][1]*10)+(caixa[4][‌​1]*5)+(caixa[5][1]*2));
    valorSaque = Integer.parseInt(JOptionPane.showInputDialog("Digite valor de saque:"));
    if(valorSaque == 0){
        JOptionPane.showMessageDialog(null, "Digite um valor para efetuar o saque!");
    } else{
        if(valorTotal < cotaMin){
            JOptionPane.showMessageDialog(null, "Caixa Vazio: Chame o Operador");
            return null;
        }
        if(valorSaque > valorTotal){
            JOptionPane.showMessageDialog(null, "Saque não realizado por falta de cédulas");
            return null;
        }

2 answers

3

There must be something in your code:

int valor = Integer.parseInt(JOptionPane.showInputDialog("Digite um número"));

Or so:

String digitado = JOptionPane.showInputDialog("Digite um número");
int valor = Integer.parseInt(digitado);

It turns out, if you click the cancel button, the showInputDialog will return null and trying to make Integer.parseInt(null), one NumberFormatException is launched. Here’s what you can do to get around this:

String digitado = JOptionPane.showInputDialog("Digite um número");
if (digitado == null) {
    JOptionPane.showMessageDialog(null, "Cancelado...");
} else {
    int valor = Integer.parseInt(digitado);
    // ...
}

Or else:

String digitado = JOptionPane.showInputDialog("Digite um número");
int valor = digitado == null ? 0 : Integer.parseInt(digitado);

Your code contains this:

valorSaque = Integer.parseInt(JOptionPane.showInputDialog("Digite valor de saque:"));

To tidy up, just use this instead:

String digitado = JOptionPane.showInputDialog("Digite valor de saque:");
valorSaque = digitado == null ? 0 : Integer.parseInt(digitado);
  • Victor using the above method would have to change a lot in my code, in fact I would like to know if there is something simpler, command issue understand. If you want to see the code follow the same below:

  • @Paulohenriquegallo Then, post the code. Otherwise it is difficult to guess what is happening in it, do not find?

  • @Paulohenriquegallo You better edit the question and put the code there. So you can be sure he’s right. However, I have already updated my answer. It just hints that questions like yours are usually closed because it is difficult to know what is happening, since it does not show the code, and this makes the question difficult to answer. So tip for next time.

0


With your code in hand, it’s easier. See correction:

valorTotal = ((caixa[0][1] * 100) + (caixa[1][1] * 50) + (caixa[2][1] * 20) + (caixa[3][1] * 10) + (caixa[4][‌​1] * 5) + (caixa[5][1] * 2));
int valorSaque = 0;
valorSaqueString = JOptionPane.showInputDialog("Digite valor de saque:");
if (valorSaqueString == null) {
    JOptionPane.showMessageDialog(null, "Ação cancelada");
} else if ((valorSaque = Integer.parseInt(valorSaqueString)) == 0) {
    JOptionPane.showMessageDialog(null, "Digite um valor para efetuar o saque!");
} else {
    if (valorTotal < cotaMin) {
        JOptionPane.showMessageDialog(null, "Caixa Vazio: Chame o Operador");
        return null;
    }
    if (valorSaque > valorTotal) {
        JOptionPane.showMessageDialog(null, "Saque não realizado por falta de cédulas");
        return null;
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.