JAVA使用弹出消息“阻止Jar应用程序多次运行”;已在运行;。(使用ServerSocket())

JAVA使用弹出消息“阻止Jar应用程序多次运行”;已在运行;。(使用ServerSocket()),java,Java,目前,当用户多次尝试运行jar时,我试图显示一条弹出消息。 我当前的代码如下所示 public static void main(String[] args){ new ServerSocket(65535, 1, InetAddress.getLocalHost());// if there are already one // running jar, it will p

目前,当用户多次尝试运行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);
    }

一种常用的方法是在磁盘上创建一个文件,称APP正在运行并删除JAR正常终止时的文件,在启动时检查文件是否存在并显示适当的消息,也考虑JVM

异常终止的情况。
例如,eclipse用一个
.lock
文件锁定当前工作区,最好的方法是创建一个显示程序状态的文件,如果程序已经运行,不要让程序再次执行。但是你必须小心;如果您的程序在终止前意外停止而未编辑文件,则在以后执行程序时会出现很多问题

您需要捕获
bindeception、
并显示“已运行”弹出窗口,然后退出,所有这些都在
catch
块中

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


您还需要将
ServerSocket
存储到一个静态变量中,这样它就不会被垃圾收集,这将关闭它。

您编写的代码实际上不会这样做,因为您允许对ServerSocket进行垃圾收集,这将关闭它。您需要将其存储到变量中。您需要捕获BindException,并在其中显示“已运行”弹出窗口,然后退出。您还需要捕获可能出现的任何其他IOException。@EJP我应该存储哪种类型的变量ServerSocket?@EJP+1如果可以,真不敢相信解决方案这么简单。感谢您的帮助。您的评论不支持EJP-1:),为什么您认为它没有回答这个问题?因为他特别说“使用ServerSocket”。它仍然回答了关于应用程序而不是套接字访问的OP需要minotor的问题。您没有抓住要点。ServerSocket是“监视器访问”。他自己也这么说。阅读问题。你不需要其他任何东西。不,最好的方法是他想做的方式。他没有要求另一种方法,而你的方法也没有那么好,因为它有几个漏洞,正如你自己注意到的,这是监听套接字技术所没有的-1.