Java的。使用弹出消息“已在运行”防止多个运行的Jar App。 (使用ServerSocket())

时间:2014-03-24 03:10:00

标签: java

目前我正在尝试在用户尝试多次运行jar时显示弹出消息。 我目前的代码如下所示

public static void main(String[] args){

  new ServerSocket(65535, 1, InetAddress.getLocalHost());// if there are already one 
                                                         // running jar, it will prevent 
                                                         // the program to execute

  JOptionPane.showMessageDialog(frame, "Hello World \n"); //Display hello world message 
                                                          // when run

}
当用户运行jar多次时,

期望输出:

Your jar application is already running . . .

我的问题是,我们如何显示一条消息告诉用户jar应用程序已经在运行,因为ServerSocket()将阻止应用程序运行,因此“已经运行”弹出的消息我放在那之后将无法运行。

解答:

 try{
       new ServerSocket(65535, 1, InetAddress.getLocalHost());
       JOptionPane.showMessageDialog(frame, "Hello World \n");
    }
 catch(BindException ex){
        JOptionPane.showMessageDialog
             (frame, "Your jar application is already running . . . \n");
        System.exit(0);
    }

3 个答案:

答案 0 :(得分:3)

一种常用的方法是在磁盘上创建一个说明正在运行的文件,并在正常终止jar时删除该文件,检查启动时文件是否存在并显示正确的消息,还要考虑jvm异常终止的情况

例如,eclipse使用.lock文件锁定当前工作空间

答案 1 :(得分:2)

最好的方法是创建一个显示程序状态的文件,如果程序已经运行,不要让程序再次执行。但你必须小心;如果您的程序在终止之前没有编辑文件就意外停止,那么在以后执行程序时会出现很多问题

答案 2 :(得分:1)

您需要抓住BindException,并显示“已在运行”的弹出窗口,然后退出catch块中的所有内容。

您还需要捕捉可能出现的任何其他IOExceptions

您还需要将ServerSocket存储到静态变量中,以便不会对其进行垃圾回收,这将关闭它。