使用Double.parseDouble时出错

时间:2014-02-15 16:49:49

标签: java

我是java新手,只是想知道如何摆脱这个错误:

Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1011)
at java.lang.Double.parseDouble(Double.java:540)
at fksdfs.test1.assign(test1.java:69)
at fksdfs.test1.main(test1.java:60)

我正在尝试从文本字段中获取值并将其转换为double以执行计算,但它无法正常工作。谁能帮我? 对于凌乱的编码感到抱歉。

public class test1 {
    private JTextField tField;

    public static void main(String[] args) {
        JLabel Age = new JLabel("Age");
        JTextField textField = new JTextField(10);
        JLabel Overall = new JLabel("Overall: ");
        JTextField age = new JTextField(10);
        JLabel shoot = new JLabel("Shooting: ");
        JTextField shooting = new JTextField(10);
        JLabel dribble = new JLabel("Dribbling: ");
        JTextField dribbling = new JTextField(10);
        JLabel pass = new JLabel("Passing : ");
        JTextField passing = new JTextField(10);
        JLabel defend = new JLabel("defending : ");
        JTextField defending = new JTextField(10);
        JLabel head = new JLabel("Heading : ");
        JTextField heading = new JTextField(10);
        JLabel pace = new JLabel("Pace: ");
        JTextField pacey = new JTextField(10);

        JPanel panel = new JPanel();
        panel.add(Age);
        panel.add(textField);
        panel.add(Overall);
        panel.add(age);
        panel.add(shoot);
        panel.add(shooting);
        panel.add(dribble);
        panel.add(dribbling);
        panel.add(pass);
        panel.add(passing);
        panel.add(defend);
        panel.add(defending);
        panel.add(head);
        panel.add(heading);
        panel.add(pace);
        panel.add(pacey);

        String age1 = textField.getText();
        String overall1 = age.getText();
        String shooting1 = shooting.getText();
        String dribbling1 = dribbling.getText();
        String passing1 = passing.getText();
        String heading1 = heading.getText();
        String defending1 = defending.getText();
        String pace1 = pacey.getText();

        JOptionPane.showMessageDialog(null, panel);

    }

    public static void assign(String s) {
        Double.parseDouble(s);

    }
}

2 个答案:

答案 0 :(得分:3)

导致错误的代码未在上面的代码中显示。它是您调用assign方法的地方。当你调用它时,String是空的,所以你试图将""转换成一个有意义的数字应该抛出这个异常。

请注意,异常消息告诉您所有这些:

  

线程中的异常" main" java.lang.NumberFormatException:empty String:

String为空 - 没有数字。

  

在fksdfs.test1.assign(test1.java:69)

它出现在test1.java的第69行,你们都在那里分配。

修复:不要这样做,不要尝试解析空字符串。首先测试String是否为空,或者在try / catch块中进行解析。

顺便说一下,在这里提问时,请努力发布格式良好的代码。我们是志愿者,因此希望您付出努力,以便在您向我们寻求帮助时,阅读和理解您的代码并不是很难。另外,避免在main方法中执行所有这些操作或使用 static 方法(例如assign方法)。此方法应该是一个实例方法,并且大多数代码都应该在适当的OOP类中。在尝试创建复杂的GUI之前,您将需要学习如何创建Java的类和基础知识,Java Tutorials可以提供帮助。

答案 1 :(得分:0)

正如您未来代码的提示......

使用GUI和输入代码时,通常最好为不正确的输入创建预先设置的异常处理程序。我的偏好是:

try{
   double somethingDouble = Double.parseDouble(something.getText());
}catch(){
   JOptionPane.showMessageDialog(frame,
   "Check input - this is supposed to be a decimal value!");
   something.setText("");
   e.printStackTrace();
}
  • 这样你就可以将try块添加到actionPerformed方法中,并确定你的产品的用户 - 或者在这种情况下,你的代码 - 是否可以确定他/她是否输入了有效的输入。

注意:将e.printStackTrace()行放在try块

中的错误消息之后