【问题标题】:NumberFormatException while using JFrame使用 JFrame 时出现 NumberFormatException
【发布时间】:2014-12-09 02:29:57
【问题描述】:

该代码应该获取订单及其价格并将它们保存在各自的 ArrayLists 中。

public class SetMenu0{

    private double price;
    private int size;
    private String output;
    private String priceOutput;
    String next;
    JTextField orderIn;
    JTextField priceIn;

    private JFrame orderInput;

    JPanel txtFldPanel;
    JPanel btnPanel;

    ArrayList orderList = new ArrayList<String>();
    ArrayList priceList = new ArrayList<Double>();

    public SetMenu0()
    {
        orderInput = new JFrame();
        orderInput.setTitle("Input Order and Price");
        orderInput.setSize(200,350);
        orderInput.getContentPane();
        orderInput.setLayout(new BorderLayout());
        orderInput.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel txtFldPanel = new JPanel();
        orderIn = new JTextField(10);
        priceIn = new JTextField(5);
        txtFldPanel.add(orderIn);
        txtFldPanel.add(priceIn);

        JPanel btnPanel = new JPanel();
        JButton addBtn = new JButton("ADD");
        btnPanel.add(addBtn);
        addBtn.addActionListener(new ButtonListener());
        addBtn.setActionCommand("add");
        JButton fnshBtn = new JButton("FINISH");
        btnPanel.add(fnshBtn);
        addBtn.addActionListener(new ButtonListener());
        fnshBtn.setActionCommand("fnsh");

        size = orderList.size();

        Container cont = orderInput.getContentPane();
        cont.add(txtFldPanel,BorderLayout.NORTH);
        cont.add(btnPanel,BorderLayout.SOUTH);

        orderInput.pack();
    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            String actionEnter = e.getActionCommand();
            if(actionEnter.equals("add"))
            {
                orderList.add(orderIn.getText());
                priceList.add(Double.parseDouble(priceIn.getText()));
                orderIn.setText("");
                priceIn.setText("");
            }
            else if(actionEnter.equals("fnsh"))
            {
                orderInput.dispose();
            }
        }
    }

    public JFrame getFrame()
    {
        return orderInput;
    }

    public ArrayList getOrd()
    {
        return orderList;
    }

    public ArrayList getPri()
    {
        return priceList;
    }

    public int getSize()
    {
        return size;
    }

}

当我按下添加按钮时,它会显示 NumberFormatException。为什么是这样?我可以从主代码中添加其余代码,但为什么它没有保存在 ArrayList 中?

这是错误: java.lang.NumberFormatException:对于输入字符串:“” 在 java.lang.NumberFormatException.forInputString(未知来源) 在 java.lang.Integer.parseInt(未知来源) 在 java.lang.Integer.parseInt(未知来源) 在 com.howtodoinjava.demo.poi.SetMenu0$ButtonListener.actionPerformed(SetMenu0.java:84) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$400(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

【问题讨论】:

  • 异常应该告诉你是哪一行导致了问题。
  • 对不起,我只有这些
  • 它没有。只是带我到一个显示 java 异常断点的窗口
  • 你的问题在这里 com.howtodoinjava.demo.poi.SetMenu0$ButtonListener.actionPerformed(SetMenu0.java:84 你正在尝试解析一个空字符串
  • 是的,谢谢。我通过将 int 输出更改为“0”来修复 i

标签: java jframe actionlistener jtextfield numberformatexception


【解决方案1】:

可能是因为这行:

priceList.add(Double.parseDouble(priceIn.getText()));

在尝试解析文本之前,您要确保 priceIn 文本字段包含一个数字。

【讨论】:

  • 我确实输入了一个数字。每次准确地说是 25 个
  • 在这种情况下,您能否添加更多有关您遇到的异常的详细信息?
【解决方案2】:

你必须使用(按钮添加点击)

if(!(priceIn.isEmpty || orderIn.isEmpty)){
     //Do your adding
}

此代码检查 JTextFiels 中是否有内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多