目前我正在尝试在用户尝试多次运行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);
}
答案 0 :(得分:3)
一种常用的方法是在磁盘上创建一个说明正在运行的文件,并在正常终止jar时删除该文件,检查启动时文件是否存在并显示正确的消息,还要考虑jvm异常终止的情况
例如,eclipse使用.lock
文件锁定当前工作空间
答案 1 :(得分:2)
最好的方法是创建一个显示程序状态的文件,如果程序已经运行,不要让程序再次执行。但你必须小心;如果您的程序在终止之前没有编辑文件就意外停止,那么在以后执行程序时会出现很多问题
答案 2 :(得分:1)
您需要抓住BindException,
并显示“已在运行”的弹出窗口,然后退出catch
块中的所有内容。
您还需要捕捉可能出现的任何其他IOExceptions
。
您还需要将ServerSocket
存储到静态变量中,以便不会对其进行垃圾回收,这将关闭它。