Java 在设置了默认值的情况下启动Popupwindow时出现NullPointerException,否则它将正常工作
当我通过主控制器的按钮事件打开弹出窗口时 弹出窗口出现,一切看起来都很完美。 但当我试图在组合框或文本字段中设置数据时 PopUpPersController:Java 在设置了默认值的情况下启动Popupwindow时出现NullPointerException,否则它将正常工作,java,javafx,nullpointerexception,initialization,popupwindow,Java,Javafx,Nullpointerexception,Initialization,Popupwindow,当我通过主控制器的按钮事件打开弹出窗口时 弹出窗口出现,一切看起来都很完美。 但当我试图在组合框或文本字段中设置数据时 PopUpPersController: public PopUpPersController() { initialize(); } private void initialize() { txtMa_LohnGesKum.setText("1200.12"); } 然后按下按钮打开弹出窗口,我得到一个空指针异常 main控制器称为Projektcontro
public PopUpPersController() {
initialize();
}
private void initialize() {
txtMa_LohnGesKum.setText("1200.12");
}
然后按下按钮打开弹出窗口,我得到一个空指针异常
main控制器
称为Projektcontroller
,
关联的FXML文件
称为Projekt.FXML
popupwindow控制器称为“PopupUppersController”,
关联的FXML文件
称为PersCalc.FXML
。
所有元素都有fxId。
我认为用defaultdata填充组合框或文本字段的工作方式与主控制器中的工作方式相同。。。
我没有找到一个涵盖这个问题的答案
我是Java新手,非常感谢您的帮助和问候
马库斯
主控制器或项目控制器中打开弹出窗口的按钮的代码:
@FXML
void onAction_Test(ActionEvent event) {
try {
Parent root1 = FXMLLoader.load(getClass().getResource("/ui/fxml/PersCalc.fxml"));
Stage persStage = new Stage();
persStage.setTitle("Personalkosten-Rechner");
persStage.setScene(new Scene(root1));
persStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
我试图找出主要错误:
<BorderPane xmlns="http://javafx.com/javafx/10.0.1"xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.controller.PopUpPersController">
Parent root1=FXMLLoader.load(getClass().getResource("/ui/fxml/PersCalc.fxml"));
3.将数据分配到textfield
原因:java.lang.NullPointerException位于
初始化(popuperscocontroller.java:123)
此行中的代码(请参见上面的initialize()
):
加载包含
fx:controller
属性的fxml会导致使用构造函数以0个参数创建控制器类的实例而产生fxmloader
。在注入任何字段之前调用构造函数,导致出现NullPointerException
,即使这些字段可由FXMLLoader
访问,并且fxml文件包含正确的fx:id
属性
假设您正确设置了字段/fx:id
,使initialize
方法对fxmloader
可见,而不是从构造函数调用initialize
,应该可以解决此问题:
public PopUpPersController() {
}
@FXML // you need this annotation for non-public members to be visible to FXMLLoader
private void initialize() {
txtMa_LohnGesKum.setText("1200.12");
}
确保应注入到的字段
fxmloader
也用@FXML
(或public
)注释fxml文件中设置了必需的fx:id
属性。加载包含fx:controller
属性的fxml会导致使用构造函数以0个参数创建控制器类的实例。在注入任何字段之前调用构造函数,导致出现NullPointerException
,即使这些字段可由FXMLLoader
访问,并且fxml文件包含正确的fx:id
属性
假设您正确设置了字段/fx:id
,使initialize
方法对fxmloader
可见,而不是从构造函数调用initialize
,应该可以解决此问题:
public PopUpPersController() {
}
@FXML // you need this annotation for non-public members to be visible to FXMLLoader
private void initialize() {
txtMa_LohnGesKum.setText("1200.12");
}
确保字段
fxmloader
应该注入到的字段也用@FXML
(或public
)进行了注释,并且在FXML文件中设置了必需的fx:id
属性。请。。。请…非常感谢你的清楚解释。它很有效,我对正在发生的事情有了更好的了解,Marcust非常感谢你的清晰解释。它起作用了,我对正在发生的事情有了更好的了解