在计算器中按下取消按钮'C'后出错(Eclipse IDE和swing)

时间:2016-08-07 12:27:09

标签: java swing numberformatexception

这是我的取消按钮的代码,当我按下'='按钮之前它正常工作但是在显示最终结果后按'='然后如果按下'C'按钮则显示java。 lang.NumberFormatException这里是一段代码和'convert'& 's'是一个字符串

    if(e.getSource() == buttonOp){
                convert = Integer.parseInt(txt.getText());
                System.out.println("parsing done!");
                String choice = e.getActionCommand();
                if(choice.equals("x^2")){
                    txt.setText("");
                    total = convert * convert;
                    System.out.println("total is"+total);
                    s += txt.getText();
                }
                else if(choice.equals("x^3")){
                    txt.setText("");
                    total = convert * convert * convert;
                    s += txt.getText();
                }
                else if (choice.equals("=")){   
                //txt.setText(choice);
                //  number = true;
                    number = false;
                    txt.setText("");
                    System.out.println("pressed '='");
                    if(txt.getText().length() > 0){
                        StringBuilder sb = new StringBuilder(txt.getText());
                        sb.delete(0, txt.getText().length());
                        s = sb.toString();
                    }
                s = Double.toString(total);
                s += txt.getText();
            }
                /*else if (choice.equals("+")){
                    total = convert;

                }*/
                else if(choice.equals("C")){
                    System.out.println("pressing C");
                    if(txt.getText().length()>0){
                        StringBuilder str = new StringBuilder(txt.getText());
                        str.deleteCharAt(txt.getText().length()-1);
                        s = str.toString();
                    }
                    txt.setText(s);
                    }
                }
            else{
                txt.setText(null);
            }
            txt.setText(s);
            }
        });   

这是输出我在'='

之后按'Ç'
    parsing done!
    total is2601.0
    parsing done!
    pressed '='
    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException:     For input string: "2601.0"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at cal.Calculator$2.actionPerformed(Calculator.java:95)
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$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.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)

1 个答案:

答案 0 :(得分:2)

来自例外

  

.... parseInt(未知来源)......

     

...对于输入字符串:“2601.0”...

因此,您要调用parseInt()以获取非int格式的值(“2601.0”)。

我认为你的问题就在这里

if(e.getSource() == buttonOp){
      convert = Integer.parseInt(txt.getText()); // <<<<

所以要么把它放在更合适的地方(在if-else内) 或者使用Dobule.parseDouble()作为非int值非常适合计算器应用。