在JavaFx中重新启动应用程序

时间:2013-06-15 21:50:04

标签: java eclipse javafx-2 javafx fxml

我想关闭然后重新启动已经运行的应用程序(自动),通过单击按钮或类似的东西,我想这样做是为了以其他语言重新启动应用程序,我是JavaFx和Java的新手,请问你能解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

这个问题缺乏细节。您确实提到了JavaFX应用程序,但了解该应用程序的部署方式非常重要。它是作为Java webstart应用程序,独立jar还是自包含的本机应用程序在Web浏览器中运行的?你是如何开始申请的?对这些问题的回答将使您更容易回答具体问题。

虽然以下示例不是JavaFX,但此处使用的方法适用于部署JavaFX应用程序的一些方法。重新启动运行良好的应用程序的一种方法是从脚本启动应用程序。在脚本内部将是一个while循环,它根据程序退出代码不断重新启动程序。以下是在Linux平台上启动IntelliJ的bash shell脚本的示例:

while true ; do
   eval "$JDK/bin/java" $ALL_JVM_ARGS -Djb.restart.code=88 $MAIN_CLASS_NAME $*
   test $? -ne 88 && break
done

在此示例中,启动脚本将“jb.restart.code”作为应用程序参数传递。如果IntelliJ希望重新启动,它将返回该值88作为退出代码。该脚本会观察应用程序退出代码,如果值为88,则重新启动应用程序。

这种方法适用于大多数平台,但需要通过脚本启动应用程序。

答案 1 :(得分:2)

一种解决方案是将启动脚本中的命令行和工作目录传递给main()方法。然后使用ProcessBuilder可以重新启动应用程序。另一种可能性是在自定义类加载器中启动整个应用程序(例如,Spring项目在其源代码库中有合适的类加载器),然后您可以基本上通过在另一个类加载器中启动main来重新启动,然而您需要适当的内务处理来释放线程和资源。第一个例子。

答案 2 :(得分:1)

retstart.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent t) {
            if(getOnCloseRequest()!=null){
                getOnCloseRequest().handle(new WindowEvent(getScene().getWindow(), WindowEvent.WINDOW_CLOSE_REQUEST));
//write code to invoke application instance again
            }else{
                close();
            }

        }
    });