Java 尝试从文本字段获取文本时的NPE?

Java 尝试从文本字段获取文本时的NPE?,java,javafx,scenebuilder,Java,Javafx,Scenebuilder,因此,我的计划是从textfield获取文本,将其保存在“currentvalue”变量中,并使其在每次从按钮调用其中一个方法时都保存一个新值。 这是我的控制器类: package application; import java.io.IOException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Node;

因此,我的计划是从textfield获取文本,将其保存在“currentvalue”变量中,并使其在每次从按钮调用其中一个方法时都保存一个新值。 这是我的控制器类:

package application;



import java.io.IOException;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;


public class Controller {
@FXML
Button buttonyes,buttonno;
private Stage stage;
private Scene scene;
private Parent root;

public void yes(ActionEvent event) throws IOException {
 root = FXMLLoader.load(getClass().getResource("Order.fxml"));
 stage = (Stage)((Node)event.getSource()).getScene().getWindow();
 scene = new Scene(root);
 stage.setScene(scene);
 stage.show();
}
 
 public void no(ActionEvent event) {
  System.exit(0);
 }
 
@FXML
Button buttonback;

public void back(ActionEvent event) throws IOException{
    root = FXMLLoader.load(getClass().getResource("Welcome.fxml"));
     stage = (Stage)((Node)event.getSource()).getScene().getWindow();
     scene = new Scene(root);
     stage.setScene(scene);
     stage.show();
}

@FXML
private TextField display = new TextField("0,00"); // I either get a NFE here 


double currentvalue = Double.parseDouble(display.getText()); //or a NPE here if I delete the new TextField line
double value1 = 3.00;
double value2 = 2.50;
double value3 = 2.00;
double value4 = 1.50;
double value5 = 1.00;

public void order3() {
    display.setText(String.valueOf(currentvalue+value1));
}

public void order25() {
    display.setText(String.valueOf(currentvalue+value2));
}

public void order2() {
    display.setText(String.valueOf(currentvalue+value3));
}

public void order15() {
    display.setText(String.valueOf(currentvalue+value4));
}
public void order1() {
    display.setText(String.valueOf(currentvalue+value5));
}

public void order(ActionEvent event) throws IOException{
    root = FXMLLoader.load(getClass().getResource("Bye.fxml"));
     stage = (Stage)((Node)event.getSource()).getScene().getWindow();
     scene = new Scene(root);
     stage.setScene(scene);
     stage.show();
}

}

所以基本上我是在计算一个新的值,一旦按下一个按钮,它就会显示在文本字段中。我在网上找到了很多解决方案,但似乎都不管用,这就是为什么我要问这个问题

这是NFE的错误

javafx.fxml.LoadException: 
/C:/Users/daydr/eclipse-workspace/Projektarbeit-Bestellen/Bestellservice/bin/application/Welcome.fxml:11

    at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2685)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3323)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
    at application.Main.start(Main.java:14)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.NumberFormatException: For input string: "0,00"
    at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
    at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.base/java.lang.Double.parseDouble(Double.java:549)
    at application.Controller.<init>(Controller.java:52)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
    at java.base/java.lang.Class.newInstance(Class.java:645)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:938)
    at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:982)
    at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:229)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
    at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
    ... 17 more
javafx.fxml.LoadException:
/C:/Users/daydr/eclipseworkspace/Projektarbeit-Bestellen/Bestellservice/bin/application/Welcome.fxml:11
位于javafx.fxml/javafx.fxml.fxmloader.constructLoadException(fxmloader.java:2707)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:2685)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:2548)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3323)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3280)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3249)
在javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3222)
在javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3199)
位于javafx.fxml/javafx.fxml.fxmloader.load(fxmloader.java:3192)
在application.Main.start处(Main.java:14)
在javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication1$9(launchempl.java:846)
在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
位于javafx.graphics/com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:96)
在javafx.graphics/com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
位于java.base/java.lang.Thread.run(Thread.java:832)
原因:java.lang.NumberFormatException:对于输入字符串:“0,00”
位于java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
位于java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
位于java.base/java.lang.Double.parseDouble(Double.java:549)
位于application.Controller.(Controller.java:52)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
位于java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
位于java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
位于java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
位于java.base/java.lang.Class.newInstance(Class.java:645)
位于javafx.fxml/javafx.fxml.fxmloader$ValueElement.processAttribute(fxmloader.java:938)
位于javafx.fxml/javafx.fxml.fxmloader$instancedecrationelement.processAttribute(fxmloader.java:982)
在javafx.fxml/javafx.fxml.fxmloader$Element.processStartElement(fxmloader.java:229)
位于javafx.fxml/javafx.fxml.fxmloader$ValueElement.processStartElement(fxmloader.java:754)
位于javafx.fxml/javafx.fxml.fxmloader.processStartElement(fxmloader.java:2808)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:2634)
... 还有17个
还有NPE的那个

javafx.fxml.LoadException: 
/C:/Users/daydr/eclipse-workspace/Projektarbeit-Bestellen/Bestellservice/bin/application/Welcome.fxml:11

    at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2685)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3323)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3280)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3249)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3222)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3199)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3192)
    at application.Main.start(Main.java:14)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.NullPointerException: Cannot invoke "javafx.scene.control.TextField.getText()" because "this.display" is null
    at application.Controller.<init>(Controller.java:52)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
    at java.base/java.lang.Class.newInstance(Class.java:645)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:938)
    at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:982)
    at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:229)
    at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
    at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
    ... 17 more
javafx.fxml.LoadException:
/C:/Users/daydr/eclipseworkspace/Projektarbeit-Bestellen/Bestellservice/bin/application/Welcome.fxml:11
位于javafx.fxml/javafx.fxml.fxmloader.constructLoadException(fxmloader.java:2707)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:2685)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:2548)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3323)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3280)
位于javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3249)
在javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3222)
在javafx.fxml/javafx.fxml.fxmloader.loadImpl(fxmloader.java:3199)
位于javafx.fxml/javafx.fxml.fxmloader.load(fxmloader.java:3192)
在application.Main.start处(Main.java:14)
在javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication1$9(launchempl.java:846)
在javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
位于java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
位于javafx.graphics/com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:96)
在javafx.graphics/com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
位于java.base/java.lang.Thread.run(Thread.java:832)
原因:java.lang.NullPointerException:无法调用“javafx.scene.control.TextField.getText()”,因为“this.display”为null
位于application.Controller.(Controller.java:52)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
位于java.base/jdk.internal.r
@Override
public void initialize(){
    currentValue = Double.parseDouble(display.getText());
}
currentValue = NumberFormat.getInstance().parse(display.getText()).doubleValue();
DoubleProperty currentValueProperty = new DoubleProperty();
public void initialize(){
    display.textProperty().bindBidirectional​( currentValueProperty, NumberFormat.getInstance() )
}