Java 将文本字段中的字符串解析为双精度字符串

Java 将文本字段中的字符串解析为双精度字符串,java,parsing,double,gettext,Java,Parsing,Double,Gettext,我正在尝试将文本字段中的字符串解析为双精度: Double.parseDouble(变量.getText()) 但该程序会引发以下异常: 错误:gpacalculator.xGPA.calGPAbtnActionPerformed(xGPA.java:341)处的线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 以下是我的声明: private void calGPAbtnActionPerformed(java.awt.event.

我正在尝试将文本字段中的字符串解析为双精度:

Double.parseDouble(变量.getText())

但该程序会引发以下异常:

错误:gpacalculator.xGPA.calGPAbtnActionPerformed(xGPA.java:341)处的线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常

以下是我的声明:

private void calGPAbtnActionPerformed(java.awt.event.ActionEvent evt) {                                                
  String q1,q2,q3,q4,q5,q6,q7,q8,w1,w2,w3,w4,w5,w6,w7,w8;
    q1 = course1.getText();
    q2 = course2.getText();
    q3 = course3.getText();
    q4 = course4.getText();
    q5 = course5.getText();
    q6 = course6.getText();
    q7 = course13.getText();
    q8 = course15.getText();
    w1 = course7.getText();
    w2 = course8.getText();
    w3 = course9.getText();
    w4 = course10.getText();
    w5 = course11.getText();
    w6 = course12.getText();
    w7 = course14.getText();
    w8 = course16.getText();

    gpaCal.setUnits1(Double.parseDouble(q1));
    gpaCal.setUnits2(q2);
    gpaCal.setUnits3(q3);
    gpaCal.setUnits4(q4);
    gpaCal.setUnits5(q5);
    gpaCal.setUnits6(q6);
    gpaCal.setUnits7(q7);
    gpaCal.setUnits8(q8);
    gpaCal.setGrade1(w1);
    gpaCal.setGrade2(w2);
    gpaCal.setGrade3(w3);
    gpaCal.setGrade4(w4);
    gpaCal.setGrade5(w5);
    gpaCal.setGrade6(w6);
    gpaCal.setGrade7(w7);
    gpaCal.setGrade8(w8);
}
注意:我只是试图解析第一个,以显示代码的想法

来自
Double#parseDouble(String)
JavaDoc:如果字符串为null,则抛出NullPointerException

在解析之前,您需要检查null(如果可以为null,也可能检查变量),因此如下所示:

if(variable != null && variable.getText() != null) {
    Double.parseDouble(variable.getText()
}

我打赌你的NPE是在调用堆栈中向上传播的,这就是为什么它被捕获在
xGPA.java:341

final String variableText = (variable != null) ? variable.getText() : null;
final Double result = (variableText != null) ? Double.parseDouble(variableText) : 0;

首先检查字符串是否为空。i、 e.如果您的文本字段中没有输入任何文本,这将返回一个错误。

变量
可能为null,我将添加它。如果文档为emptyOK,getText()将抛出NPE,因此这可能是您到达该字段的原因。如果需要双精度值,还可以添加一个通过0.0的else子句。我希望在运行程序时,在第一个文本字段中输入“3”。是否仍为null?否。所有包含文本的文本字段都将返回所需字符串。当应用程序在需要对象的情况下尝试使用null时,将引发NullPointerException。在该行设置断点,并检查该行上的每个对象,以查看它们是否为null。