如何允许一次只运行一个Java程序实例?
我需要防止用户多次启动我的Java应用程序(WebStart
Swing应用程序)。因此,如果应用程序已经在运行,则应该无法再次启动它或显示警告/再次关闭它。
有一些方便的方法可以做到这一点吗?我考虑过要阻止端口或将某物写入文件。但是希望您可以访问某些系统属性或JVM?
顺便说一句 目标平台是带有Java 1.5的Windows XP
回答:
我认为您的建议是在启动应用程序时打开端口以进行监听。
这很容易做到,而且您在关闭应用程序时无需担心清理它。例如,如果您写入文件,但随后有人使用任务管理器终止进程,则该文件不会被删除。
另外,如果我没有记错的话,没有从JVM内部获取Java进程的PID的简便方法,因此不要尝试使用PID来制定解决方案。
这样的事情应该可以解决问题:
private static final int PORT = 9999;private static ServerSocket socket;
private static void checkIfRunning() {
try {
//Bind to localhost adapter with a zero connection queue
socket = new ServerSocket(PORT,0,InetAddress.getByAddress(new byte[] {127,0,0,1}));
}
catch (BindException e) {
System.err.println("Already running.");
System.exit(1);
}
catch (IOException e) {
System.err.println("Unexpected error.");
e.printStackTrace();
System.exit(2);
}
}
此示例代码与之明确绑定127.0.0.1
,应避免任何防火墙警告,因为此地址上的所有流量都必须来自本地系统。
选择端口时,请避免使用“知名端口 ”
列表中提到的端口。理想情况下,应该在文件中或通过命令行开关使使用的端口可配置,以防发生冲突。
以上是 如何允许一次只运行一个Java程序实例? 的全部内容, 来源链接: utcz.com/qa/411982.html