我有一JAVA程序,但不想在同一台机上打开两次来运行,即一台机只能运行一个这样的程
2个回答
2013-12-25 · 知道合伙人软件行家
关注
展开全部
目前我所知道的有两个方法方法一
java启动时调用的命令都是java,在windows上如果通过进程名称来判断程序是否启动时不可行的,因为可能存在多个调用java的程序,一种办法是将java.exe复制一份重命名,然后在启动脚本里使用这个新的exe即可。
最近发现还有一种办法,花了一点时间,通过批处理bat来完成,原理是使用文件占用与否做出判断。
运行java程序时将console推送到文件,这样这个文件就会被独占,此时删除、重命名等操作是不允许的。
利用这个原理,java程序启动时先用bat的重命名ren命令将console文件重命名,如果失败则说明程序运行中,否则就可以启动(del命令无论删除成功与否都返回0,所以使用del是不行的),另外这样做的一个目的是不用在给用户做什么界面了,通过bat提示完成,同时系统运行起来后不显示黑窗口。
方法二
利用socket 启动查看端口是否被占用
推荐方法一 使用范围更广
java启动时调用的命令都是java,在windows上如果通过进程名称来判断程序是否启动时不可行的,因为可能存在多个调用java的程序,一种办法是将java.exe复制一份重命名,然后在启动脚本里使用这个新的exe即可。
最近发现还有一种办法,花了一点时间,通过批处理bat来完成,原理是使用文件占用与否做出判断。
运行java程序时将console推送到文件,这样这个文件就会被独占,此时删除、重命名等操作是不允许的。
利用这个原理,java程序启动时先用bat的重命名ren命令将console文件重命名,如果失败则说明程序运行中,否则就可以启动(del命令无论删除成功与否都返回0,所以使用del是不行的),另外这样做的一个目的是不用在给用户做什么界面了,通过bat提示完成,同时系统运行起来后不显示黑窗口。
方法二
利用socket 启动查看端口是否被占用
推荐方法一 使用范围更广
追问
我的要求是程序启动时进行一次自检,检查是否已经在内存运行了,如已运行则后来的那个程序选择自动退出,不让程序同时在一台机上运行两个相同的JAVA程序。
注:是这个程序本身的自检是否已经运行。不要求同时运行两个以上。只许一个运行。
追答
我说的就是啊 你仔细读读方法一 你在你的java程序 每次开启删除然后生成一个日志文件 并占有他 别放开 等第二次打开的时候 试图删除他 但如果已经打开了一个程序 该文件是被占有的 不能被删除 这时候 你就可以认为这个程序已经运行 就是这个思路 你可以有很多方法来实现
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询