Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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
根据用户在图形界面中的决定执行某个main。JAVA FX_Java_Javafx_Wait_Scenebuilder - Fatal编程技术网

根据用户在图形界面中的决定执行某个main。JAVA FX

根据用户在图形界面中的决定执行某个main。JAVA FX,java,javafx,wait,scenebuilder,Java,Javafx,Wait,Scenebuilder,我会尽量简单。 在主屏幕的开头,我创建了一个新的舞台,其中显示了2个按钮。 根据单击的按钮,它将在舞台控制器中将数字设置为1或2。 然后我创建一个条件,如果数字是1,我执行主程序的某个部分。 如果数字为2,则执行main的另一部分 问题是我必须等待用户的响应。我做了一个while条件(当数字为0时,我会在while中返回),但程序不工作。 你有没有办法等待用户的回复? 这是代码的开头 public void start(Stage primaryStage) {

我会尽量简单。 在主屏幕的开头,我创建了一个新的舞台,其中显示了2个按钮。 根据单击的按钮,它将在舞台控制器中将数字设置为1或2。 然后我创建一个条件,如果数字是1,我执行主程序的某个部分。 如果数字为2,则执行main的另一部分

问题是我必须等待用户的响应。我做了一个while条件(当数字为0时,我会在while中返回),但程序不工作。 你有没有办法等待用户的回复? 这是代码的开头


    
    public void start(Stage primaryStage) {
        
        try {
            
            FXMLLoader loader1 = new FXMLLoader(getClass().getResource("SampleStart.fxml"));
            Parent root1 = loader1.load();
            SampleControllerStart StartController = (SampleControllerStart) loader1.getController();
            
            
            
            Scene scene1 = new Scene(root1,474,435);
            primaryStage.setScene(scene1);
            
            
            primaryStage.show();
            
            StartController.setEtat(0);
            

            while(StartController.getEtat() == 0) {
                System.out.println("ok");
            }
            if(StartController.getEtat() == 1) {  ```

看起来你要做的是创建一个对话框,其中包含一个选项,该选项将影响程序的其余部分

JavaFX实现这一点有点过分了,但您可以使用
JavaFX.scene.control.Dialog
获得您想要的

样本:

public void start(Stage)抛出IOException{
ButtonType b1=新的ButtonType(“选项1”,ButtonData.左);
ButtonType b2=新的ButtonType(“选项2”,ButtonData.RIGHT);
Dialog diag=新建Dialog();
diag.setTitle(“我的程序”);//不需要
DialogPane=diag.getDialogPane();
pane.setHeaderText(“您需要做出选择”);//不是必需的
pane.setContentText(“选择1或2”);
圆圈图标=新圆圈(20);//应为图像
icon.setFill(Paint.valueOf(“蓝色”));
pane.setGraphic(图标);//不需要
pane.getButtonTypes().addAll(b1、b2);
可选res=diag.showAndWait();
如果(!res.isPresent())
返回;
System.out.println(res.get().getText()+“/”+res.get().getButtonData());
如果(res.get().等于(b1)){
System.out.println(“单击按钮1”);
//做点什么
}否则{
System.out.println(“点击按钮2”);
//做点别的
}
}
我正在使用
对话框。show和wait
在这里暂停,直到用户做出选择。千万不要像没有至少一个
Thread.sleep()
线程的循环那样执行循环:这会白白浪费CPU,可能会导致程序没有响应

最好使用JavaFX创建一个完整的UI,并在事件处理程序中为自己的控件处理用户的选择,然后在
JavaFX.concurrent.Service
中执行操作,该服务将在后台运行,让UI响应状态显示或取消任务


或者,您并不真正需要UI,而是使用控制台从用户那里获取输入…

您的结构完全错误。
start()
方法应该做的唯一一件事就是加载FXML并显示阶段。控制器应该有一个处理用户响应的事件处理程序,然后执行任何需要的操作。也就是说,将此逻辑放在控制器中,而不是放在
start()
方法中。这是非常基本的设计。如果我们有您的FXML和
SampleControllerStart
源代码(至少是按钮点击处理程序),我们可能会帮助您在公开显示代码时遵守java命名约定谢谢您的帮助这正是我想要做的。万分感谢@请考虑接受回答和投票。谢谢