写了一个SWT程序 Windows 下运行,由于启动时需要检测 改程序是否已经启动,如已经启动给予提示不再另打开程序。
经搜索:
综合网上各种方案 最终总结4方案:
1.lock File
2.Socket 绑定端口
3.通过JNI 调用 C 程序进行判断。
4.Java6 以上 可以支持 命令行“jps” 命令 可以显示出各个java运行程序的进程ID 和主程序名称或者程序打包的jar报名。
方案特点:
1.方案1简单。
每当程序启动锁定文件,对文件进行标记。再次启动程序读取该文件 发现已被标记,进而不在启动新程序。当程序退出时进行标记清除。
存在致命缺陷: 当程序运行中发生意外退出。没有对文件进行清除标记。将导致程序判断错误。
2.方案2 比方案1 : 可靠,但是这种方案显得 有些 奇怪变通绕行太远,导致其他的问题 局限,
比如 使用的端口被其他程序占用时 或 当有防火墙组织使用端口时 你讲无法绑定端口,程序无法启动。