Limit Your App To One Instance

url http://www.devx.com/tips/Tip/13745

How can we make sure that only one instance of our Java application is running on a machine? Java does not provide the means of finding out if another instance of our app is running. And, sometimes, we may really want to limit the user of our app to only one running instance. So, what do we do?

One way of dealing with this problem is to have our app create a file under a certain file name when it runs for the first time. Subsequent launches of our app will check for that file. If it already exists, the app knows another instance is already running and will inform the user, then quit. The first instance of the app, however has to delete the file before it exits.

The drawback of this approach is that out first instance of the app may crash, or may be killed by the user, or for whatever reason, it may cease to exist without having a chance to remove the little file that indicates a running instance.

Another way of dealing with this problem is via the use of java.net.ServerSocket class. The idea is to have an instance of ServerSocket listening over some port for as long as the first running instance of our app runs. Consequent launches of our app will try to set up their own ServerSocket over the same port, and will get a java.net.BindException (because we cannot start two versions of a server on the same port), and we'll know that another instance of the app is already running.

Now, if, for any unintentional reason, our app dies, the resources used by the app die away with it, and another instance can start and set the ServerSocket to prevent more instances from running. The following illustrates our approach:

java 代码
  1. private static final int RUN_PORT = 9666;    
  2. //use an obscure port    
  3.   
  4. void main(String[] av)    
  5. {    
  6.         try    
  7.         {    
  8.                 java.net.ServerSocket ss = new java.net.ServerSocket(PORT);    
  9.         }    
  10.       catch (java.net.BindException ex)    
  11.         {    
  12.                 System.out.println("Program already running");    
  13.                 System.exit(1);    
  14.         }    
  15.       catch (java.io.IOException ex)    
  16.         {    
  17.                 ex.printStackTrace();    
  18.                 System.exit(1);    
  19.         }    
  20.         //the rest of your code for the main(...) method    
  21. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值