新场景启动后代码如何执行

时间:2018-05-07 04:32:11

标签: java javafx

我有一个已加载的场景,我从现有场景加载另一个场景。

加载后,新场景,我有一些我想要执行的其他代码(将一些数据发布到事件总线)。

以下是代码:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#06892b" />

    <corners android:radius="20dp" />
</shape>

我理解第1,2行的功能。然而,在第2行之后,我认为当前正在使用的控制器类在新场景接管时停止运行。有人可以解释一下,如何启动新场景并将代码继续到print语句?

这是否意味着即使我关闭了当前场景,现在的控制器仍在使用?

编辑1:stage.close(); home.start(stage); System.out.println("How does the code get here?"); EventBus.getDefault().post(new LoginEvent(...); 是包含新场景的方法并启动新窗口的类。 homestage,其中按钮是用户按下以启动新场景的按钮。

编辑2:我的问题不是链接的重复,因为我的问题是关于代码如何继续并且线程没有被阻止。我觉得gui课程不同。然而,法比安的回答让我感到困惑。

谢谢!

1 个答案:

答案 0 :(得分:1)

加载/显示新场景不会阻止该线程。实际上,如果你阻塞线程会很糟糕,因为这会阻止线程执行它的工作(布局,渲染,事件处理等)来冻结GUI。

应用程序的启动方法或类似方法只是设置一些数据,稍后应用程序线程将其用于布局/呈现。

它(非常粗略地)与以下非GUI程序类似:

public class Application {

    private List<String> data;

    public void start(List<String> data) {
        // set up initial data
        data.add("Hello World");
        data.add("42");
        this.data = data;
    }

    public void handleInput(String input) {
        // react to user input
        data.clear();
        data.add("Your input was: " + input);
    }

}
public class Launcher {
    public static void main(String[] args) {
        List<String> data = new ArrayList<>();
        Application app = new Application();
        app.start(data);
        Scanner scanner = new Scanner(System.in);
        System.out.println("the current data is: " + data); // "render"
        String line;
        while (!"exit".equals(line = scanner.nextLine())) { // loop is done by the framework
            app.handleInput(line); // handle input event
            System.out.println("the current data is: " + data); // "render"
        }
    }
}