Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量值显示为null_Java_Interface - Fatal编程技术网

Java 变量值显示为null

Java 变量值显示为null,java,interface,Java,Interface,变量RecurserName被分配了一个由另一个控制器传递的值。但是初始化之后,当BtnClicked方法内部打印recursername时,它会打印null。为什么? public class nextSceneController implements Initializable { private String recUsername; public void transferMessage(String message){ recUsername = me

变量
RecurserName
被分配了一个由另一个控制器传递的值。但是初始化之后,当
BtnClicked
方法内部打印
recursername
时,它会打印
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);
    }
}
公共类OrderListController实现可初始化{
public OrderListController()引发SQLException、ClassNotFoundException、IOException{
}
私有字符串orderRefNoRec;
公共消息(字符串消息){
orderRefNoRec=消息;
}
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
试一试{
PreparedStatement PreparedStatement=connection.prepareStatement(“从'orders'中选择'FoodName','Quantity','Price',其中OrderRefNo='“+orderRefNoRec+”);
ResultSet ResultSet=preparedStatement.executeQuery();
while(resultSet.next()){
observableList.add(新的orderListTableModel(resultSet.getString(“FoodName”)、resultSet.getString(“Quantity”),
结果集.getString(“价格”);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
food_OrderListTableModel.setCellValueFactory(新属性ValueFactory(“foodName”));
数量\u OrderListTableModel.setCellValueFactory(新属性ValueFactory(“数量”);
price_OrderListTableModel.setCellValueFactory(新属性ValueFactory(“价格”));
orderListTableModel.setItems(空);
orderListTableModel.setItems(observableList);
}
}

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

下面是一个可能出错的示例(我无法确定,因为我无法访问完整的代码,但这是对最可能出现的问题的过度简化):

  • 主场景控制器将创建一个新的nextScene
  • 然后,业务逻辑调用initialize传递所有必要的资源等
  • 您在此处调用print,但此时尚未调用
    transferMessage
    ,因此
    recursermessage
    变量仍然为空
  • 然后,您可能会调用
    transferMessage
    ,这将设置变量,但打印永远不会被调用

当你将来遇到这样的问题时,如果某件事情没有做你认为它应该做的事情,就把它拉出来,一步一步地,你认为在pin上发生了什么事情,事情应该发生在哪里,你的期望应该调整到哪里。

在TransferMessage之前调用initialize。你能分享调用这些方法的代码吗?我怀疑Byte仓鼠是正确的。是的,我认为他是正确的。顺便说一句,你问的是什么代码。@Byte仓鼠嗨,有没有办法在初始化时获取变量值。嗨,谢谢你详细地分享你的知识。我的主要目的是在我的应用程序中,我必须在控制器中填充tableview。tableview使用sql从DB获取数据,对于sql,我必须提供一个变量字符串值,该值在前一个场景控制器中生成并传递到此控制器。任何其他方法都将不胜感激。谢谢。你需要发布你是如何创建这个nextSceneController代码的,这样我才能对此有所帮助。“上一个控制器”。嗨,我用我的主程序编辑了这个问题。请复习一下。谢谢