关于SO的第一个问题。
所以我刚开始学习JavaFX,而且我已经在学校学习了一年的普通Java编码,所以当我遇到这个问题时我有点困惑:
我开始在JavaFX Scene Builder中创建一个基本GUI,它有几个按钮,一个textField和一个statusIndicator,当我点击buttonListen
时,我希望buttonToggle
消失并拥有状态指示符( spinWheel
)出现。以下是处理该代码的代码:
@FXML
private TextField fieldDisplay;
private Button buttonToggle;
private Button buttonListen;
private ProgressIndicator spinWheel;
@FXML
private void ButtonListenListener(ActionEvent event){
if(buttonToggle.isVisible()){
buttonToggle.setVisible(false);
spinWheel.setVisible(true);
}
}
对于那些熟悉JavaFX的人来说,所有这些都包含在FXMLDocumentController.java类中。但是,当我运行程序时,有一个很大的长错误堆栈,但它归结为这句话说我的一个按钮上有一个nullPointer:
Caused by: java.lang.NullPointerException
at javafxfirstproj.FXMLDocumentController.ButtonListenListener(FXMLDocumentController.java:45)
我听说JavaFX充满了bug,所以我想知道这是否是我的代码中的逻辑错误,或者我是否遇到了(据称)很多错误之一。任何和所有的帮助将不胜感激。感谢。
答案 0 :(得分:3)
我需要查看更多代码(特别是FXML和加载它的代码),但我猜这个问题就在这里:
@FXML
private TextField fieldDisplay;
private Button buttonToggle;
private Button buttonListen;
private ProgressIndicator spinWheel;
@FXML
符号仅适用于其后的声明 (fieldDisplay
的声明)。如果buttonToggle
,buttonListen
和spinWheel
也与FXML相关联,则还需要对其中的每一个进行注释:
@FXML
private TextField fieldDisplay;
@FXML
private Button buttonToggle;
@FXML
private Button buttonListen;
@FXML
private ProgressIndicator spinWheel;
答案 1 :(得分:0)
如果要在FXML中创建/声明Javafx组件/节点/控件,并且希望在Java控制器类中使用它,那么您要使用的每个组件都应该使用@FXML注释。所以在你的代码中添加FXML注释
@FXML
private TextField fieldDisplay;
@FXML
private Button buttonToggle;
@FXML
private Button buttonListen;
@FXML
private ProgressIndicator spinWheel;
如果你不这样做,那么当你像这样使用它时,这些组件没有被分配任何对象
如果(buttonToggle.isVisible())
它会给你 NullPointerException
结帐this博客代码连接部分