我有一个已加载的场景,我从现有场景加载另一个场景。
加载后,新场景,我有一些我想要执行的其他代码(将一些数据发布到事件总线)。
以下是代码:
<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(...);
是包含新场景的方法并启动新窗口的类。 home
为stage
,其中按钮是用户按下以启动新场景的按钮。
编辑2:我的问题不是链接的重复,因为我的问题是关于代码如何继续并且线程没有被阻止。我觉得gui课程不同。然而,法比安的回答让我感到困惑。
谢谢!
答案 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"
}
}
}