繁体   English   中英

当应用程序关闭时尝试获取 mainApp 中文本字段的文本时出现 java.lang.NullPointerException

[英]java.lang.NullPointerException when trying to get the text of a textfield in mainApp when app is closing

我是 javaFX 的新手,我试图在我的应用程序关闭时获取文本字段的值,所以我使用了

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
FXMLController controllerClass = loader.getController();
loader.load();
controllerClass.getTextFieldValue();
System.out.println("closing");

里面

stage.setOnCloseRequest()

但我总是得到一个 java.lang.NullPointerException。

这是 getTextfieldValue()

System.out.println(textField.getText());

所以基本上这就是我想要实现的,我想在我的应用程序关闭时获取文本字段中的值。 所以我的 mainApp 类中有我的stage.onCloseRequest()方法,但 textField.getText() 总是返回一个空字符串。 我希望它返回 textField 中的当前文本。

您必须在获得控制器之前运行load()

试试这个代码:

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml"));
loader.load();
FXMLController controllerClass = loader.getController();
controllerClass.getTextFieldValue();
System.out.println("closing");

您是否忘记在Scene.fxml添加fx:id 请提供更多代码示例。 我不知道您的FXML文件中发生了什么。 我认为可能缺少某种 xml 代码。

虽然我不知道你想要实现什么,但我认为有更简单和正确的方法来做到这一点。

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/Scene.fxml")));
loader.setController(new FXMLController()); // you can not get controller, unless you set it first
FXMLController controllerClass = loader.getController();
controllerClass.getTextFieldValue();

如果您之前未将值设置为getTextFieldValue ,则这始终为null

  • 要删除 NullPointerException,请先运行load()然后再获取控制器。
  • 为了在关闭应用程序时获取文本字段的值,我使用了 java.util.prefs 中的 Preferences 类来保存文本字段的内容,然后我覆盖了 mainApp 中的stop()方法并取回了其中保存的值.

不确定这是最好的方法,但它对我有用,谢谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM