好像比较麻烦,要不运行的时候生成临时文件,再运行时作检测。或是采用JNI的方式解决,Windows平台上这个问题应该比较容易解决吧。

解决方案 »

  1.   

    临时文件肯定不行,万一断电怎么办,
    请叫jni方式是如何解决的
      

  2.   

    即不能同时运行两个相同的java程序--
    那你就自己重栽 classloader , 加上 check 如果相同的 class 就不加载了。还有就是在自己的应用程序中利用。
    class A {
    static A self=null;
    private A () {
    }
    A getInstance() {
       if ( self == null ) return new A();
       else return SAMECLASSERROR;
    }
    }
      

  3.   

    上面所说的是Singleton模式(具体请看《设计模式》一书),但我觉得应该是不行的,因为static应该只在同一个地址空间内起作用。而信建立的进程,虚拟机会给它分配新的地址空间。解决方法应该用建立内核变量之类的东西。
    不知道说的对不对,没有验证过 :)
      

  4.   

    那关于java内存方面的操作,知道如何实现吗
      

  5.   

    可以试试用一个系统变量如isrun,起始为false
    String isrun=system.getProperty("isrun","false");
    if(isrun.equalsIgnoreCase("false")){
        system.setProperty("isrun","true");
    }else{
        system.exit(-1);
    }java -Disrun=false app不知道可行否,仅供参考。
      

  6.   

    很简单,这是一个典型的信号量互斥访问的一个问题。
    可以用一个文件做作为一个公共区,当初始进程访问的,在文件中
    将信号量得到,置状态lock=true;
    若有第二个进程访问的时候,先判断状态位的情况,状态位(lock)为true,
    杀掉本进程,方法虽然有点土,但很使用哦。呵呵
      

  7.   

    如果用JNI,则可以在内存公共区建立一个全局变量,然后每次进入后判断,但这是平台相关的,只能通过本地接口来实现。你可以去VC或是Delphi论坛上问一问,在Windows平台上很容易实现的。
      

  8.   

    对于在同一个JVM中,这个问题好解决,无论用信号量或者static 或者single都行,但如果我启两个JVM怎么办?
      

  9.   

    这个问题其实关键是如何使不同的JVM之间进行通信,判断互斥
    现在还不知道
      

  10.   

    这个问题的关键是如何使两个JVM之间进行通信,判断互斥。
    我还不知道
      

  11.   

    没有很好的方法,JVM本身不提供这种支持.
    可以试一下建Socket的方法,但这种方法不牢靠.