我有2节课 第一类是控制器
public class Controller {
@FXML
private TextField myText;
public TextField getMyText() {
return myText;
}
}
还有二等舱
public class Print {
private static Controller controller = new Controller();
public void print() {
System.out.println(controller.getMyText().getText());
}
}
我在文本字段中输入一个值,代码抛出异常 引起原因:java.lang.NullPointerException:无法调用“javafx.scene.control.TextField.getText()”,因为“Controller.getMyText()”的返回值为null。
为什么?谢谢。
在 fxml 中
TextField fx:id="myText" /
如果设置
System.out.println(myText.getText());
在控制器类中一切正常。
您需要使用 FXMLLoader 加载控制器。
正如@Slaw提到的,你应该删除控制器的静态引用,如果你需要从打印外部访问控制器,你可以创建一个吸气剂。
public class Print {
private Controller controller;
public void loadFXML() {
FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/FXMLFile.fxml"));
controller = loader.<Controller>getController();
}
public void print() {
System.out.println(controller.getMyText().getText());
}
}
一开始调用一次loadFXML()函数,然后就可以调用print()函数了。