使用Double.parseDouble时出错



我是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)

我正试图从文本字段中获取值,并将其转换为双精度以进行计算,但它不起作用。有人能帮我吗?抱歉编码太乱了。

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);
}
}

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

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

线程"main"java.lang.NumberFormatException异常:空字符串:

字符串为空--其中没有数字。

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

它发生在test1.java的第69行,你们都在那里赋值。

解决方法:不要这样做,不要试图解析空字符串。首先测试字符串是否为空,或者在try/catch块中进行解析。

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

作为未来代码的提示。。。

当使用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()行放在尝试块中的错误消息之后

最新更新