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