Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 在for循环中等待输入的最佳方法?_Java_Dialog_Javafx 2 - Fatal编程技术网

Java 在for循环中等待输入的最佳方法?

Java 在for循环中等待输入的最佳方法?,java,dialog,javafx-2,Java,Dialog,Javafx 2,在JavaFX2中,我通过读取Excel文件来填充TableView。看起来是这样的: identification cellcount calved o0001 12345 false o0002 65432 true o0003 55555 false ... 当用户按下“导入”按钮时,必须将所有记录添加到数据库中。但是,如果'calved'字段的值为'true',

在JavaFX2中,我通过读取Excel文件来填充TableView。看起来是这样的:

identification    cellcount    calved
o0001             12345        false
o0002             65432        true
o0003             55555        false
...
当用户按下“导入”按钮时,必须将所有记录添加到数据库中。但是,如果'calved'字段的值为'true',我将显示一个对话框窗口,用户必须在其中选择一个日期来指定产犊发生的时间。现在最大的问题是,我希望我的for循环在对话框窗口打开时立即暂停。在我当前的代码中,所有对话框窗口都相互堆叠

这是加载FXML的对话框方法:

public void showDialog(String sURL){
    final Stage myDialog = new Stage();
    myDialog.initStyle(StageStyle.UTILITY);
    myDialog.initModality(Modality.APPLICATION_MODAL);

    URL url = getClass().getResource(sURL);

    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(url);
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
    try {
        Node n = (Node) fxmlloader.load(url.openStream());

        Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());

        myDialog.setScene(myDialogScene);
        myDialog.show();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}
下面是我处理tablerows的for循环:

@FXML
private void handle_ImportCowDataButton(ActionEvent event) {
    Cows selectedCow;

    for(ImportRow row: tblImport.getItems()){
        selectedCow = null;

        for (Cows cow : olCows) {
            if (cow.getOfficial().equals(row.getCownumber())) {
                selectedCow = cow;
            }
        }

        if (selectedCow != null) {
            if (row.getCalving()) {
                //if cow exists and cow has calved, show dialog window loading addcalving.fxml
                //then the for loop should wait until that dialog window is closed before continuing
                Context.getInstance().setPassthroughObject(selectedCow);
                Context.getInstance().showDialog("/GUI/calving/AddCalving.fxml");
            }
        } else {
            //if cow does not exist, show dialog window loading addcow.fxml
            //then the for loop should wait until that dialog window is closed before continuing
            Context.getInstance().setPassthroughObject(selectedFarmer);
            Context.getInstance().showDialog("/GUI/cow/AddCow.fxml");
        }
    }
}

使用my
showDialog()
方法中的
setOnCloseRequest()
是否是一个选项?

如果将cows列表复制到另一个数据结构(如队列)中,并在处理每个cow时将其删除,恢复处理它相对容易,因为只剩下需要处理的奶牛。

如果将奶牛列表复制到另一个数据结构(如队列)中,并在处理过程中删除每个奶牛,恢复处理它相对容易,因为只剩下需要处理的奶牛。

似乎答案比我想的简单得多,只需使用
showAndWait()
方法,而不是
show()
。我怎么会错过这个。。。谢谢你的帮助

showDialog()
方法的最终代码:

public void showDialog(String sURL){
    final Stage myDialog = new Stage();
    myDialog.initStyle(StageStyle.UTILITY);
    myDialog.initModality(Modality.APPLICATION_MODAL);

    URL url = getClass().getResource(sURL);

    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(url);
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
    try {
        Node n = (Node) fxmlloader.load(url.openStream());

        Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());

        myDialog.setScene(myDialogScene);
        myDialog.showAndWait();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

答案似乎比我想象的简单得多,只需使用
showAndWait()
方法,而不是
show()
。我怎么会错过这个。。。谢谢你的帮助

showDialog()
方法的最终代码:

public void showDialog(String sURL){
    final Stage myDialog = new Stage();
    myDialog.initStyle(StageStyle.UTILITY);
    myDialog.initModality(Modality.APPLICATION_MODAL);

    URL url = getClass().getResource(sURL);

    FXMLLoader fxmlloader = new FXMLLoader();
    fxmlloader.setLocation(url);
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
    try {
        Node n = (Node) fxmlloader.load(url.openStream());

        Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());

        myDialog.setScene(myDialogScene);
        myDialog.showAndWait();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

我如何继续for循环?
->不要使用
break
?我知道break不是解决方案,但是,即使我不使用它,对话框也只是堆叠在一起,for循环没有等待输入什么是
Dialog
,是某个库类吗?嘿,Sergey,我更改了处理导入的代码,因为它看起来有点凌乱和不清楚。这是我在尝试暂停for loopt之前首先写的。Dialog只是我用于故障排除的一个类:),可能会有帮助:)
我如何继续for循环?
->不要使用
break
?我知道break不是解决方案,但是,即使我不使用它,对话框也只是堆叠在一起,for循环没有等待输入什么是
Dialog
,这是某个库类吗?嘿,Sergey,我更改了处理导入的代码,因为它看起来有点凌乱和不清楚。这是我在尝试暂停for loopt之前首先写的。Dialog只是一个用于疑难解答的类:),可能会有帮助:)