Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于将jtextfield转换为int的Numberformat异常_Java_Integer_Numberformatexception_Parseint - Fatal编程技术网

Java 用于将jtextfield转换为int的Numberformat异常

Java 用于将jtextfield转换为int的Numberformat异常,java,integer,numberformatexception,parseint,Java,Integer,Numberformatexception,Parseint,我一直在看其他帖子的答案,他们似乎指出了我在做什么,但我仍然得到了NumberFormatException。我试图从一个JFrame构建一个简单的计算器,方法是提取jtextfield值并将其转换为int,但我得到了以下异常 package com.calculator.app; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JP

我一直在看其他帖子的答案,他们似乎指出了我在做什么,但我仍然得到了
NumberFormatException
。我试图从一个
JFrame
构建一个简单的计算器,方法是提取jtextfield值并将其转换为int,但我得到了以下异常

package com.calculator.app;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class CalculatorApp extends JFrame {

    private JPanel contentPane;
    private JTextField textField = new JTextField();
    private JTextField textField_1 = new JTextField();
    private JTextField textField_2 = new JTextField();
    int num1 = Integer.parseInt(textField.getText());
    int num2 = Integer.parseInt(textField_1.getText());
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CalculatorApp frame = new CalculatorApp();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public CalculatorApp() {

    //  int num2 = Integer.parseInt(value2);    

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblCalculatorApp = new JLabel("Calculator App");
        lblCalculatorApp.setBounds(141, 37, 138, 23);
        contentPane.add(lblCalculatorApp);

        JButton btnNewButton = new JButton("Add");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

            }
        });
        btnNewButton.setBounds(74, 112, 131, 31);
        contentPane.add(btnNewButton);

        JLabel lblNewLabel = new JLabel("");
        lblNewLabel.setBounds(169, 181, 82, 23);
        contentPane.add(lblNewLabel);

        textField = new JTextField();
        textField.setBounds(55, 73, 54, 23);
        contentPane.add(textField);
        textField.setColumns(10);

        textField_1 = new JTextField();
        textField_1.setColumns(10);
        textField_1.setBounds(151, 70, 54, 23);
        contentPane.add(textField_1);

        textField_2 = new JTextField();
        textField_2.setColumns(10);
        textField_2.setBounds(109, 162, 124, 55);
        contentPane.add(textField_2);
    //  textField_2.setText(String.valueOf(output));
        try{

            int output = Integer.parseInt(textField.getText());
                }
                catch(NumberFormatException e){
                    System.out.println("Error");    
                }

    }
}
例外情况

java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.calculator.ap.CalculatorApp.<init>(CalculatorApp.java:23)
    at com.calculator.ap.CalculatorApp$1.run(CalculatorApp.java:32)
    at java.awt.event.InvocationEvent.dispatch(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.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)
java.lang.NumberFormatException:用于输入字符串:“
位于java.lang.NumberFormatException.forInputString(未知源)
位于java.lang.Integer.parseInt(未知源)
位于java.lang.Integer.parseInt(未知源)
在com.calculator.ap.CalculatorApp上(CalculatorApp.java:23)
在com.calculator.ap.CalculatorApp$1.run上(CalculatorApp.java:32)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$500(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$JavaSecurityAccessImpl.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(未知源)
此行:

int num1 = Integer.parseInt(textField.getText());
相当于

int num1 = Integer.parseInt("");
因为您没有使用此行中的特定值初始化
textField

private JTextField textField = new JTextField();
因此,您试图将空字符串解析为整数,但它抛出了
NumberFormatException
,因为它不是整数

如果你只是想克服这些问题,你可以把3个整数放在那里:

private JTextField textField = new JTextField("1");
private JTextField textField_1 = new JTextField("2");
private JTextField textField_2 = new JTextField("3");
或者(更好)您可以删除以下行,因为您似乎需要稍后(单击按钮时)解析它们:


上面的解释可以帮助您避免这种异常

但是,如果要对这些数字求和,应填写此方法的正文:

    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String text1 = textField.getText();
            String text2 = textField_1.getText();
            textField_2.setText(getIntegerValue(text1) + getIntegerValue(text2) + "");
        }
    });
其中
getIntegerValue
可以如下所示:

private int getIntegerValue(String s) {
    if ( "".equals(s) ) {
        return 0;
    }
    return Integer.parseInt(s);
}
或更短:

private int getIntegerValue(String s) {
    return "".equals(s) ? 0 : Integer.parseInt(s);
}
此方法:

    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String text1 = textField.getText();
            String text2 = textField_1.getText();
            textField_2.setText(getIntegerValue(text1) + getIntegerValue(text2) + "");
        }
    });
  • 如果字符串为空(无值),则返回
    0
  • 如果字符串表示整数,则返回整数
  • 如果字符串不是整数或空字符串,则引发
    NumberFormatException
  • 不需要捕获
    NumberFormatException
    ,因为它是
    运行时异常

当然,如果要抛出异常,即使字符串为空,也可以从最后一个方法中删除
if
/trialent运算符。

发布异常详细信息,但可能是这个
Integer.parseInt(textField.getText())
存在此问题,因为此
extField.getText()
没有为您提供正确格式的整数。我在上面发布了异常。您无法将空字符串解析为数字,字符串值必须仅包含数字才能成功解析。请遵循下面答案中提供的指导原则,将解决可能的感谢副本问题。这似乎奏效了。因此,没有任何内置方法可以在不编写自己的方法的情况下使用,就像您使用getIntegerValue来实现这一点一样?我不知道其他方法。如果您想停止某些输入的异常,我认为您应该在纯Java中手动执行此操作(没有外部库)。现在,根据您的需要,您可以在之前验证输入(最终使用正则表达式)。