我想关闭然后重新启动我正在制作的已经运行的应用程序(自动),通过单击按钮或类似的东西,我想这样做是为了以其他语言重新启动应用程序,我是一般来说,JavaFx 和 Java 的新手,你能给我一个解决这个问题的方法吗?
3 回答
这个问题缺乏细节。您确实提到了 JavaFX 应用程序,但了解该应用程序的部署方式很重要。它是在 Web 浏览器中运行的,作为 java webstart 应用程序、独立 jar 还是自包含的本机应用程序?你是如何开始申请的?获得这些问题的答案将使您更容易通过具体问题回答您的问题。
虽然以下示例不是 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,则重新启动应用程序。
这种方法适用于大多数平台,但需要通过脚本启动应用程序。
一种解决方案是将启动脚本中的命令行和工作目录传递给 main() 方法。然后,您可以使用 ProcessBuilder 重新启动应用程序。另一种可能性是在自定义类加载器中启动整个应用程序(例如,Spring 项目在其源代码库中有合适的类加载器),然后您基本上可以通过在另一个类加载器中启动您的 main 来重新启动,但是您需要适当的内务处理以释放线程和资源第一个例子。
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();
}
}
});