gpt4 book ai didi

java - 变量值显示为 null

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:14 24 4
gpt4 key购买 nike

变量recUsername被分配了另一个 Controller 传递的值。但是初始化后,当在 BtnClicked 方法中打印 recUsername 时,它会打印 null。为什么?

public class nextSceneController implements Initializable {
private String recUsername;
public void transferMessage(String message){
recUsername = message;
}
@FXML
private Button Btn;

@FXML
void BtnClicked(ActionEvent event) {
System.out.println(recUsername);
}

@Override
public void initialize(URL location, ResourceBundle resources) {
System.out.println(recUsername);
}
}

这是链接到 menu.fxml 的 MenuController.java

public class MenuController {
public MenuController() throws SQLException, ClassNotFoundException {
}
String orderRefNo = Key_Generator.getReferenceKey();
FXMLLoader loader = new FXMLLoader(getClass().getResource("orderList.fxml"));
Parent root = loader.load();
OrderListController orderListController = loader.getController();
orderListController.transferMessage(orderRefNo);
Stage orderListStage = new Stage();
orderListStage.setScene(new Scene(root));
orderListStage.show();
}

这是链接到 orderList.fxml 的 OrderListController

public class OrderListController implements Initializable {
public OrderListController() throws SQLException, ClassNotFoundException, IOException {
}
private String orderRefNoRec;
public void transferMessage(String message){
orderRefNoRec = message;
}
@Override
public void initialize(URL location, ResourceBundle resources) {
try{
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `FoodName`, `Quantity`, `Price` FROM `orders` WHERE OrderRefNo='"+orderRefNoRec+"'");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
observableList.add(new orderListTableModel(resultSet.getString("FoodName"), resultSet.getString("Quantity"),
resultSet.getString("Price")));
}
} catch (SQLException e) {
e.printStackTrace();
}
food_OrderListTableModel.setCellValueFactory(new PropertyValueFactory<>("foodName"));
quantity_OrderListTableModel.setCellValueFactory(new PropertyValueFactory<>("qty"));
price_OrderListTableModel.setCellValueFactory(new PropertyValueFactory<>("price"));

orderListTableModel.setItems(null);
orderListTableModel.setItems(observableList);
}
}

最佳答案

在这种情况下,您需要说明程序流程,以了解何时能够调用设置的变量。

下面是可能出错的地方的说明(不能肯定地说,因为我无法访问完整的代码,但这是对当前最可能出现的问题的过度简化):

diagram

  • 您的主场景 Controller 创建一个新的 nextScene。
  • 然后业务逻辑调用初始化来传递所有必要的资源等...
  • 您在此处调用了 print,但此时尚未调用 transferMessage,因此 recUserMessage 变量仍为 null。
  • 然后您可能会调用 transferMessage,它会设置变量,但永远不会调用打印。

当你将来遇到这样的问题,某件事没有做你认为应该做的事情时,把它画出来,一步一步地画出你认为正在发生的事情,以确定事情应该在哪里发生,以及你的期望应该在哪里调整。

关于java - 变量值显示为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59544123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com