我做了个swing查寻软件,我想让运行这个软件的电脑,只运行一个这个称许,当再次启动这个程序时,将最小化的程序激活,并不启动新的程序,就像金山词霸,迅雷什么的一样。我在百度查了很多,有几种方法,我试了其中的一种,端口方法,但在我家就好使,在单位就不好使,我非常困惑,请各位帮忙看看,源代码如下:import java.net.*;public class InstanceControl2 extends Thread {public void run() {  try{   Socket sock = new Socket("127.0.0.1", 22222);//创建socket,连接22222端口   System.exit(0); //连接成功,说明有实例存在,则退出  }catch (Exception e)  {}  try{   ServerSocket server = new ServerSocket(22222);//创建socket,连接22222端口   while (true)   {    server.accept(); //接受连接请求   }  }catch (Exception e)  {   e.printStackTrace();  }}
public static void main(String a[]){
    InstanceControl2 ic = new InstanceControl();ic.start();
    }
}
在家就好使,但在单位,无论我把端口号改为多少,这条语句都能执行通过,Socket sock = new Socket("127.0.0.1", 22222);,并执行下面的System.exit(0);请问各位,这是为什么呢?我家是拨号上网,自动获取ip。单位电脑是固定ip的。   

解决方案 »

  1.   

     与固定ip应该没有关系,我也是固定ip,但程序运行正常。
    打开服务端口可能会受到防火墙的影响,也可能和别的端口冲突。
    先查一下所在端口是否被占用,未占用的话暂时关闭防火墙试试。
      

  2.   

    锁定文件private static boolean lockInstance(final String lockFile) { 
        try { 
            final File file = new File(lockFile); 
            final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); 
            final FileLock fileLock = randomAccessFile.getChannel().tryLock(); 
            if (fileLock != null) { 
                Runtime.getRuntime().addShutdownHook(new Thread() { 
                    public void run() { 
                        try { 
                            fileLock.release(); 
                            randomAccessFile.close(); 
                            file.delete(); 
                        } catch (Exception e) { 
                            log.error("Unable to remove lock file: " + lockFile, e); 
                        } 
                    } 
                }); 
                return true; 
            } 
        } catch (Exception e) { 
            log.error("Unable to create and/or lock file: " + lockFile, e); 
        } 
        return false; 
      

  3.   

    谢谢上面的回答,但不是我想要的。
    我单位装的杀毒软件是nod32,我家里也是,为什么在家运行就可以,在单位就不行呢?
    我上面的代码中的两个端口号,甚至不一样,在单位都可以通过Socket sock = new Socket("127.0.0.1", 22222);然后执行 System.exit(0); 我十分的纳闷!!随便改端口号,都执行System.exit(0); !!!!!谁能给解释一下?
      

  4.   

    你这段代码的逻辑有问题吧?无论怎么执行,最后的return都会被执行吧?
      

  5.   

    我说的是return false这句,始终会被执行。