java的应用程序其实是运行在java进程中的如果你需要判断一个java程序是否已经启动需要调用Runtime类中的exec方法

解决方案 »

  1.   

    一个简单的方法,在启动的时候绑定一个socket端口,如果绑定失败,说明已经启动了这个java程序。
    如果想象vb,vc那样,就要借助jni了
      

  2.   

    cao_zp(方世玉) 说的有道理,不一定是端口,反正做一个标记就可以,直接去读取系统进程好像不行,因为他都是java虚拟机包着的,从pid上无法区分。
      

  3.   

    两种方法:
    1.利用socket
    2.利用文件锁推荐第二个
      

  4.   

    我认为Socket,是不合理的。因为,SocketServer通过指定的端口是否打开来判断程序是否已经运行。而我的程序的端口是任意产生的,也就是说,我不知道我打开了哪个端口,我总不能从头到尾地检查一下端口吧。另外,我的程序是允许重复打开的,但是,每次打开的端口是任意的,再就是,如果让一个与Socket无关的程序,非要引入一个Socket包,未免有点牵强了吧。
      

  5.   

    什么叫你的程序的端口是任意产生的?用一线程在指定端口监听,每次程序起来时连那个指定端口,怎么会是任意的?
    用socket有杀鸡用牛刀之嫌,但确实是一种判断方式(我以前的程序是这么做的)。如果用文件锁还不是要引入File类-_-
      

  6.   

    对 zjpangxie(本命年,别惹我)说: 没有明白我的话?我想你的方法是这样的吧,程序A指定SocketServer使用的是5000端口;每次启动一个实例,都去连5000这个端口,是吧?这个方法前提是,事先必须知道这个程序使用5000这个端口。如果我的程序的端口是随机产生的,不是我事先指定的,那么我怎么知道,已经打开的实例究竟使用哪个端口呢?明白我的意思吗?File类程序常使用的类,使用它并不奇怪,而Socket就不一样了。
      

  7.   

    我是没有完全理解楼主的意思:
      是想检查我的JAVA程序是否启动吗.
      这样的话.你可以利用静态变量.用一个静态变量做标识.通过检查他来.看系统是否以运行一个JAVA程序  想检查其他的程序[JAVA],我感觉要用到JNI接口.使用系统的函数来完成.和JAVA没有什么关系
      

  8.   

    我觉得“ eclipse30(静心) ”,说得办法挺合理,有点儿象VC、VB中的办法。
    只可惜没有具体实例。
      

  9.   

    对,java进程被包装在java虚拟机中,为了实现跨平台,所以没有向系统注册什么标志信息。
    一般只能用文件锁和socket来实现互斥。
    用socket存在一个问题,就是可能这个socket被其他程序占用而导致冲突,所以建议还是使用文件锁。
    但这里有个问题:java程序是由一系列class文件构成,如果我把class文件复制到另一个目录下再运行,他还算不算同一个程序呢?