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

标签 java executable-jar pid

所以我将我的项目打包为一个可以正常工作的可执行 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.
}

关于java - 仅运行可执行 Jar 文件的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953831/

相关文章:

java - 如何为 Spring Boot 应用程序执行命令行任务(如 Rake 任务)?

java - 显示 base64 编码的图像

java - 在 ant build 中包含 hibernate jar 依赖项

spring boot jar NoSuchBeanDefinitionException

c++ - c中如何获取进程ID,getpid()没有实现

java - Dropwizard、Scribejava、Oauth 2.0 和 Github

java - 使用构建器模式 : "Build method has bad return type, not compatible with POJO type" 的 Jackson 反序列化

java - 有没有办法将 hsqldb 数据文件嵌入到可执行 jar 中?

linux - Bash 脚本,通过从 PID 文件中提取来终止进程

linux - 关于进程的pid