gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:16:51 25 4
gpt4 key购买 nike

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

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

这是代码:

stage.close();
home.start(stage);

System.out.println("How does the code get here?");
EventBus.getDefault().post(new LoginEvent(...);

我了解第 1,2 行的功能。然而,在第 2 行之后,我认为当前使用的 Controller 类会随着新场景的接管而停止运行。有人可以解释一下,新场景是如何启动的,代码是如何继续到打印语句的?

这是否意味着即使我关闭了当前场景,当前 Controller 仍在使用?

编辑1:home是包含新场景方法并启动新窗口的类。 stagebutton.getScene().getWindow() 其中,button 是用户按下以启动新场景的某个按钮。

编辑2:我的问题与链接的问题不重复,因为我的问题是关于代码如何继续并且线程没有被阻塞。我正在考虑一个不同的 gui 类。然而,法比安的回答消除了我的困惑。

谢谢!

最佳答案

加载/显示新场景不会阻塞线程。事实上,如果你阻塞线程,那会很糟糕,因为这会阻止线程完成它的工作(布局、渲染、事件处理等),从而卡住 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"
}
}
}

关于java - 新场景启动后代码如何执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50207133/

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