我是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);
}
}
答案 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();
}
注意:将e.printStackTrace()行放在try块
中的错误消息之后