如题

解决方案 »

  1.   

    用socket绑定端口
    然后检查端口是否被占用
    这个比较常用
      

  2.   

    "用socket绑定端口",这种方法不是很好吧,那还不如写配置文件呢!
      

  3.   

    最快的,socket还要用占系统的端口,
    其实很简单,java程序启动是,先产生一个.lock的文件,并对此文件加锁,另一个就无法获得锁,听上去很复杂,其实实现很简单。程序如下 private boolean checkLock(){
    FileOutputStream fo = null;
    File file = new File(".lock");
    try {
    fo = new FileOutputStream(file);
    //加锁,如果程序已经启动就无法获得锁
    lock = fo.getChannel().tryLock();
    if (lock == null) {
    logger.warn("<Warning> <Could not start epayment. this application is still alive.>");
    return false;
    }else{
    return true;
    }
    } catch (FileNotFoundException e) {
    logger.error("checkSftp: lock file can't be created.error:" + e);
    return false;
    }catch (IOException e) {
    logger.error("checkSftp: lock file can't be created.error:" + e);
    return false;
    }

    }
      

  4.   

    shagan(上海外地人) 你的方法不错,我试了一下,挺好的!
      

  5.   

    用文件锁,
    File   file   =   new   File(".lock");
    只能对同一个启动目录下的程序,
    进行才有效。
    除非能用一个绝对固定的文件如:
    File   file   =   new   File("C:\\.lock");
    但这样移至性就有问题了。
      

  6.   

    让整个应用程序只启动一次的方法: 
    第一次窗口出来时建立socket服务器,如果端口被占用,则关闭应用程序. 让某一个窗口只启动一次的方法: 
    每个窗口实际上就是一个对象,针对某一个窗口,只创建一个对象不就行了,单例就OK了?或者干脆弄成静态的,省心.