我做了个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的。
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的。
解决方案 »
- 已打包的类出现无法编译 菜鸟提问
- java小程序,继承报错
- 30求一个oracle日期计算问题,虚心请教各位哥哥姐姐.很急.....
- IO简单问题.在线等.谢谢
- windows上怎么设置默认的swing的LAF?(J2SE1.6)
- FindBugs问题修改请教2
- 请问: 如何用java实现监听数据库表中的某个字段,一旦有update操作就读取数据或触发进行另外的操作处理
- 为什么我的Jb 7.0 Enterprise安装后没有VisiBroker? 在线等待
- 大家看看
- Thread 报错
- java.net.SocketException: Connection reset 分高,在线等!!!!
- Object中包含hashCode()这个方法么?
打开服务端口可能会受到防火墙的影响,也可能和别的端口冲突。
先查一下所在端口是否被占用,未占用的话暂时关闭防火墙试试。
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;
}
我单位装的杀毒软件是nod32,我家里也是,为什么在家运行就可以,在单位就不行呢?
我上面的代码中的两个端口号,甚至不一样,在单位都可以通过Socket sock = new Socket("127.0.0.1", 22222);然后执行 System.exit(0); 我十分的纳闷!!随便改端口号,都执行System.exit(0); !!!!!谁能给解释一下?