为什么在 LIBGDX 中的 setScreen() 之后代码 运行?

Why does a code run after setScreen() in LIBGDX?

我有一个简单的菜单屏幕,其中有四个按钮和每个按钮上的事件侦听器。在这个监听器中,我执行 changeScreen() 方法,它通过调用 setScreen() 来改变屏幕。屏幕变化没有问题,但为什么 changed() 方法体 changeScreen() 之后的代码 运行。

openFile.addListener(new ChangeListener() {
    @Override
    public void changed(ChangeEvent event, Actor actor) {
        parent.changeScreen(Hren.OPENFILE);
        System.out.println("Why do I see this text when I am in OPENFILE screen");
    }
 });

大多数编程语言中都有一个叫做调用堆栈的东西。您调用的每个方法都将 运行 直到它遇到调用 return 的行。 (如果您不键入一个,则在该方法的末尾有一个隐式的 return。)当您调用一个方法时,它会被添加到堆栈中,因此它是 运行 next before it is弹出并可以从添加的位置继续执行。

在这种情况下,一旦 changeScreen() returns,它就被弹出堆栈并继续执行此 changed() 方法的其余部分。不管调用它的是什么,当前不再排队等待在屏幕上绘制都没关系。调用堆栈不知道也不关心。