JavaFx启动应用程序并继续

时间:2015-05-25 17:32:17

标签: java javafx

我有以下3行代码:

1 System.out.println("Starting program...");
2 Application.launch((Gui.class));
3 System.out.println("Continuing program...");

问题是当javafx应用程序启动时,第2行之后的代码在我关闭javafx应用程序之前不会执行。当javafx应用程序仍在运行时,启动javafx应用程序和执行第3行的正确方法是什么?

编辑1
我到目前为止找到的唯一解决方案是:

2 (new Thread(){
      public void run(){
        Application.launch((Gui.class));
       }
  }).start();

此解决方案对于javafx应用程序是否正常且安全?

1 个答案:

答案 0 :(得分:2)

我不确定你要做什么,但是Application.launch也等待应用程序完成,这就是为什么你没有立即看到第3行的输出。您的应用程序start方法是您要进行设置的地方。有关详细信息和示例,请参阅the API docs for the Application class

编辑:如果你想从主线程运行多个JavaFX应用程序,也许这就是你需要的:

public class AppOne extends Application
{
    @Override
    public void start(Stage stage)
    {
        Scene scene = new Scene(new Group(new Label("Hello from AppOne")), 600, 400);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args)
    {
        System.out.println("Starting first app");
        Platform.runLater(() -> {
            new AppOne().start(new Stage());
        });
        System.out.println("Starting second app");
        Platform.runLater(() -> {
            new AppTwo().start(new Stage());
        });
    }
}

public class AppTwo extends Application
{
    @Override
    public void start(Stage stage)
    {
        Scene scene = new Scene(new Group(new Label("Hello from AppTwo")), 600, 400);
        stage.setScene(scene);
        stage.show();
    }    
}

通过在JavaFX线程上运行start方法,从主线程运行多个应用程序。但是,您将失去initstop生命周期方法,因为您未使用Application.launch