我有一JAVA程序,但不想在同一台机上打开两次来运行,即一台机只能运行一个这样的程

即一打开程序就自检是否已运行,如已运行就选择退出,不重复在一台机上运行同样的程序。... 即一打开程序就自检是否已运行,如已运行就选择退出,不重复在一台机上运行同样的程序。 展开
 我来答
a11e90
2013-12-25 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部
目前我所知道的有两个方法方法一
java启动时调用的命令都是java,在windows上如果通过进程名称来判断程序是否启动时不可行的,因为可能存在多个调用java的程序,一种办法是将java.exe复制一份重命名,然后在启动脚本里使用这个新的exe即可。

最近发现还有一种办法,花了一点时间,通过批处理bat来完成,原理是使用文件占用与否做出判断。

运行java程序时将console推送到文件,这样这个文件就会被独占,此时删除、重命名等操作是不允许的。

利用这个原理,java程序启动时先用bat的重命名ren命令将console文件重命名,如果失败则说明程序运行中,否则就可以启动(del命令无论删除成功与否都返回0,所以使用del是不行的),另外这样做的一个目的是不用在给用户做什么界面了,通过bat提示完成,同时系统运行起来后不显示黑窗口。
方法二
利用socket 启动查看端口是否被占用
推荐方法一 使用范围更广
追问
我的要求是程序启动时进行一次自检,检查是否已经在内存运行了,如已运行则后来的那个程序选择自动退出,不让程序同时在一台机上运行两个相同的JAVA程序。
注:是这个程序本身的自检是否已经运行。不要求同时运行两个以上。只许一个运行。
追答
我说的就是啊  你仔细读读方法一  你在你的java程序 每次开启删除然后生成一个日志文件 并占有他 别放开 等第二次打开的时候 试图删除他 但如果已经打开了一个程序 该文件是被占有的 不能被删除 这时候 你就可以认为这个程序已经运行  就是这个思路 你可以有很多方法来实现
LycrusHamster
2013-12-25 · TA获得超过889个赞
知道小有建树答主
回答量:487
采纳率:100%
帮助的人:112万
展开全部
有一种很笨的方法
每次开程序检查一下c盘的目录下是否有个文件(名字随意),如果有,就退出,什么都不错。如果没有,就新建个,并且运行,运行结束删除该文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式