JavaFX跨控制器传递字符串问题:purchaseCode传递后目标端取值为null
问题根因
你出现null的核心原因是方法执行顺序错误:
FXMLLoader的load()方法执行时,会自动完成FXML解析、控件实例化、控制器initialize()方法调用这一系列操作,之后才会返回根节点。你现在的代码顺序是:
- 执行
loader.load()→ 此时InfoSalesController的initialize()已经运行,purchaseTxt.setText(purchaseSales)执行时purchaseSales还没有被赋值,自然是null - 才调用
is.setPurchaseSales(purchaseCode)给属性传值,这时候赋值已经晚于initialize的执行时机了。
解决方案
最简便的修改方式是调整赋值逻辑,把给文本控件赋值的操作放到setter方法中执行,这时候控件已经完成初始化,传值也已经完成:
修改InfoSalesController.java的代码即可:
public String getPurchaseSales() { return purchaseSales; } public void setPurchaseSales(String purchaseSales) { this.purchaseSales = purchaseSales; // 直接在setter中给文本控件赋值 purchaseTxt.setText(purchaseSales); } @Override public void initialize(URL url, ResourceBundle rb) { // 删掉原来这里的setText逻辑即可,其他初始化操作可以保留 }
可选校验项
如果修改后仍然有问题,可以先排查两个边界情况:
- 在
DashboardController调用is.setPurchaseSales(purchaseCode)前加一行打印,确认purchaseCode本身不是null - 确认
infoSales.fxml中绑定的控制器确实是InfoSalesController,且purchaseTxt的fx:id和代码中变量名完全一致,没有拼写错误。
内容的提问来源于stack exchange,提问作者Oliva Ann
相关产品推荐
相关产品推荐

