`
vvggsky
  • 浏览: 65500 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

防止JAVA程序重复启动的一个另类解决办法

    博客分类:
  • J2SE
阅读更多
http://www.iteye.com/topic/37732?page=1

控制这个程序在同一主机上只能启动一个实例

/**  
   * 检测系统是否只启动了一个实例  
   */  
  protected void checkSingleInstance() {   
    try {   
      srvSocket = new ServerSocket(srvPort); //启动一个ServerSocket,用以控制只启动一个实例   
    } catch (IOException ex) {   
      if(ex.getMessage().indexOf("Address already in use: JVM_Bind")>=0)   
        System.out.println("在一台主机上同时只能启动一个进程(Only one instance allowed)。");   
      log.fatal("", ex);   
      System.exit(0);   
    }   
  } 



//应用实例控制类
public class InstanceControl
{
  FileLock lock=null;
  //判断该应用是否已启动
  public boolean isRunning()
  {
    try
    {
      //获得实例标志文件
      File flagFile=new File("instance");
      //如果不存在就新建一个
      if(!flagFile.exists())flagFile.createNewFile();
      //获得文件锁
      lock=new FileOutputStream("instance").getChannel().tryLock();
      //返回空表示文件已被运行的实例锁定
      if(lock==null)return false;
    }catch(Exception ex){ex.printStackTrace();}
    return true;
  }

  public static void main(String[] args)
  {
    InstanceControl ic=new InstanceControl();
    if(ic.isRunning())
      JOptionPane.showMessageDialog(null,"已存在该程序的实例!","提示",JOptionPane.OK_OPTION);
    else
      MainClass.main(args);            
  }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics