[英]Running only single instance of Executable Jar file
所以我将我的项目打包为一个可以正常工作的可执行jar。 但是有时,用户会多次启动文件,这会导致它启动同一项目的多个实例(导致意外行为,例如,项目的延迟实例会覆盖文件中的值)。
我想知道对于Windows平台(Win7),只有一次可以锁定执行的选项是什么,然后,如果jar已在运行,只需不再执行代码即可。
我读到有关进程ID的信息,但是如果有多个Java应用程序,它们最终都将图像名称显示为javaw.exe,我如何确定自己的进程ID?
请提出做这件事的正确方法,谢谢!!
最简单的解决方案是使用固定的未使用端口。
ServerSocket ss;
try {
ss = new ServerSocket(MY_PORT);
// not already running.
} catch (BindException e) {
// already running.
}
根据我的经验,我使用的最佳方法是在特定端口(如61234)上创建侦听ServerSocket。 套接字不执行任何操作,但是如果您设法创建它,则意味着尚未启动任何其他进程。 可执行jar文件的重复实例将无法在同一端口上创建ServerSocket,因此应退出。
您可以在应用程序启动时在专用TCP端口上打开ServerSocket,并在应用程序关闭时将其关闭。
如果实例已经在运行,您将收到“使用中的端口”异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.