【问题标题】:Open a second JavaFX window from outside start [duplicate]从外部开始打开第二个 JavaFX 窗口 [重复]
【发布时间】:2016-10-12 21:27:57
【问题描述】:

如何从“start”方法之外打开辅助 JavaFX 窗口(阶段)?例如,

public class GUI_Test extends Application {
static Stage secondStage;

public static void main(String[] args) {
    launch(args);
    showSecondWin();
}

@Override
public void start(Stage primaryStage) throws Exception {
    primaryStage.setScene(new Scene(
            new VBox(
                    new Label("window 1"))));
    primaryStage.show();

    secondStage = new Stage();
}

public static void showSecondWin() {
    secondStage.setScene(new Scene(
            new VBox(
                    new Label("window 2"))));
    secondStage.show();
}
}

以上代码仅显示第一个窗口(“primaryStage”),并且(仅)当我关闭它时会出现java.lang.reflect.InvocationTargetException 错误消息。

James_D 说有一种方法可以从外部开始打开第二个窗口。如何做到这一点?

【问题讨论】:

  • 这与其他问题不同,因为我不想使用按钮或 start() 方法中的任何其他方法打开第二个窗口,正如我在对 sillyfly 的评论中所解释的那样。
  • 您应该将 JavaFX 应用程序中的 start() 方法视为“传统”(即非 JavaFX)应用程序中 main() 方法的替代品。 (在JavaFX 中,您甚至不需要main() 方法!)所以start() 是应用程序的入口点:一切都从该点开始。要求做一些最终不是由start() 方法触发的事情是没有意义的。也许this question 会有所帮助。
  • @James_D 我想从应用程序类中的方法(不是启动)创建第二个窗口。 SecondWin 方法被另一个类调用。
  • @James_D 我正在创建一个策略游戏,一个非常基本的文明游戏(一个视频游戏系列,你可能知道)。我希望当一个玩家在轮到他的时候点击一个动作按钮时,会出现一个带有消息的新窗口(“轮到你了”或类似的东西)。我无法通过 start() 方法显示该窗口。
  • @James_D 我试图避免将逻辑放在 start 方法中。在其他一些情况下,我需要打开第二个窗口,在这种情况下,将整个逻辑放在 start 方法中会非常笨拙。您确定没有办法避免将逻辑置于 start 中吗?

标签: java user-interface javafx javafx-8 stage


【解决方案1】:

来自Application 的文档:

在应用程序退出之前,启动方法不会返回,无论是通过调用 Platform.exit 还是所有应用程序窗口都已关闭。

这意味着您的main 方法中的第二行仅在JavaFX 线程退出后被调用,因此您不能再创建任何阶段。

您可以在start 方法中创建并显示您的第二阶段。如果这不是一个有效的选项,请尝试解释您要实现的目标。

【讨论】:

  • 我想打开一个从 start 方法外部触发的对话窗口。也许我可以用 stage.hide() 方法做点什么?我试着玩了一下,但它没有用......
  • 开启另一个阶段的触发点是什么?为什么要等应用退出才能表达?
  • 我想从应用程序类中的方法(不是启动)创建第二个窗口。 SecondWin 方法被另一个类调用。
  • 听起来像XY problem。您能否解释一下您到底想要实现什么,不管您认为您可能希望如何实现它?
  • 从 start() 外部打开第二个窗口(对话框)(在某些情况下),如标题所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2018-12-06
  • 2010-12-02
相关资源
最近更新 更多