繁体   English   中英

仅运行可执行Jar文件的单个实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM