我需要重新启动 java GUI 应用程序以响应用户操作,其方式类似于 eclipse 在切换工作区时自行重新启动。
我们目前使用 install4j 启动器,所以我想知道如果我使用特定的返回码或类似的东西退出应用程序,启动器是否可以配置为保持运行并重新启动应用程序?
干杯
我需要重新启动 java GUI 应用程序以响应用户操作,其方式类似于 eclipse 在切换工作区时自行重新启动。
我们目前使用 install4j 启动器,所以我想知道如果我使用特定的返回码或类似的东西退出应用程序,启动器是否可以配置为保持运行并重新启动应用程序?
干杯
这不是 install4j 中的功能。但是,您可以使用 java.lang.ProcessBuilder 再次启动启动器并调用 System.exit()。
如果启动器是单实例 GUI 启动器,您必须使用另一个可执行文件等待启动器关闭,然后重新启动原始可执行文件。这可以通过在其“启动”节点中包含“执行启动器”操作的自定义安装程序应用程序轻松完成。自定义安装程序应用程序通过带有参数的 API 启动
-q -wait 20
即它以无人值守模式(无 GUI)执行,并等待最多 20 秒以关闭所有已安装的启动器。要显示进度条,请添加
-splash "Restarting application"
到论点。启动自定义安装程序应用程序的代码如下所示:
import java.io.IOException;
import com.install4j.api.launcher.ApplicationLauncher;
try {
ApplicationLauncher.launchApplication("ID", new String[] {
"-q","-wait","20"
}, false, null);
} catch (IOException e) {
e.printStackTrace();
//TODO handle invocation failure
}
其中 ID 必须替换为自定义安装程序应用程序的 ID。
确保配置可执行文件名称。
否则它只会静默失败:安装程序编译和launchApplication()
调用不会引发任何错误。并且没有任何错误消息或日志文件可供查看,这让我花了一天的时间试错才能弄清楚。
此外,可以设置自定义 ID 以避免神秘的应用程序 ID:
ApplicationLauncher.launchApplication("restarter", new String[] { "-q", "-wait", "20", "-splash", "Restarting..." }, /* blocking */ false, /* callback */ null);