java - 解析 JTextField 输入时出现 NumberFormatException

标签 java swing input jtextfield numberformatexception

我认为 Java 小程序有一个工作代码。但是,我没有让我的程序按照我想要的方式执行。

这是它运行时显示的消息(在解析 JTextField 输入时):

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 skiRace.init(skiRace.java:24)
    at ready.AppletRunner.run(AppletRunner.java:209)
    at java.lang.Thread.run(Unknown Source)

这是我的代码:

import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class skiRace extends Applet implements ActionListener
{
int txt = 0;
int txt2 = 0;
int txt3 = 0;
int txt4 = 0;

public void init ()
{
    resize (300, 350);
    setBackground (Color.blue);
    JLabel pic = new JLabel (createImageIcon ("race.jpg"));

    JLabel ins = new JLabel ("Enter the number of points beside each skier.");
    ins.setFont (new Font ("Arial", Font.BOLD, 12));

    JLabel p1 = new JLabel (createImageIcon ("player1.jpg"));
    JTextField answer = new JTextField (3);
    int txt = Integer.parseInt (answer.getText ());

    JLabel p2 = new JLabel (createImageIcon ("player2.jpg"));
    JTextField answer2 = new JTextField (3);
    int txt2 = Integer.parseInt (answer2.getText ());

    JLabel p3 = new JLabel (createImageIcon ("player3.jpg"));
    JTextField answer3 = new JTextField (3);
    int txt3 = Integer.parseInt (answer3.getText ());

    JLabel p4 = new JLabel (createImageIcon ("player4.jpg"));
    JTextField answer4 = new JTextField (3);
    int txt4 = Integer.parseInt (answer4.getText ());

    JButton done = new JButton ("Done");
    done.setActionCommand ("done");
    done.addActionListener (this);

    add (pic);
    add (ins);
    add (p1);
    add (answer);
    add (answer2);
    add (answer3);
    add (answer4);
    add (done);

}


public void actionPerformed (ActionEvent e)
{
    if (e.getActionCommand ().equals ("done"))
    {
        if ((txt == 7) && (txt2 == 8) && (txt3 == 6) && (txt4 == 9))
        {
            JOptionPane.showMessageDialog (null, "You got it! Great work!", "Correct",
                    JOptionPane.INFORMATION_MESSAGE);
        }
        else
        {
            JOptionPane.showMessageDialog (null, "You are incorrect, please try again.",
                    "Incorrect", JOptionPane.ERROR_MESSAGE);
        }
    }
}


protected static ImageIcon createImageIcon (String path)
{
    java.net.URL imgURL = dice.class.getResource (path);
    if (imgURL != null)
    {
        return new ImageIcon (imgURL);
    }
    else
    {
        System.err.println ("Couldn't find file: " + path);
        return null;
    }
}
}

为什么会发生这种情况?

我认为这与对话框或带有输入的文本字段有关,因为这是我在 Java 小程序中使用这两个函数中的任何一个的第一个程序。

最佳答案

由于此行 (# 24) 位于 init() 方法中:

int txt = Integer.parseInt (answer.getText ());

answer 将具有与构造时完全相同的文本(即什么都没有 - 空字符串)。空字符串不是整数,也不能解析为整数。

<小时/>

我建议改为:

  • 创建一个 SpinnerNumberModel 并保留对该模型的引用。在 JSpinner 的构造函数中添加模型,而不是在 JTextField 中。
  • 当微调器的值发生变化时,或者当用户激活按钮时,对数字(通过查询模型获得)进行操作,而不是在创建按钮之后和用户看到控件之前立即进行操作,更不用说获取来改变它。
<小时/>

其他说明:

  • 不要“隐藏”变量。例如

    int txt4 = 0;
    

    被声明为类属性,但在 init() 方法中再次声明为局部变量。例如

    int txt4 = Integer.parseInt (answer4.getText ());
    

    要修复它,请将其更改为:

    txt4 = Integer.parseInt (answer4.getText ()); // use class attribute to store result
    

关于java - 解析 JTextField 输入时出现 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36782180/

相关文章:

java - 更新进度条

javascript - 用 JavaScript 改变焦点

javascript - 将输入字符串转换为数组,以便可以操作每个单词

java - 如有必要,在 Java Swing EDT 中运行函数

java - 在 android 中检索 ParseUser 对象时遇到问题

java - 单个 SSL 上的多个 Jetty 域

java - 创建房间时 CONNECTION_FAILED Google Play 服务

java - 是什么导致基于 JTabbedPane 的 Swing 应用程序性能下降?

python - 以编程方式中断 raw_input

java - 将字节数组转换为字符串