我认为您的建议是在启动应用程序时打开端口以进行监听。
这很容易做到,而且您在关闭应用程序时无需担心清理它。例如,如果您写入文件,但随后有人使用任务管理器终止进程,则该文件不会被删除。
另外,如果我没有记错的话,没有从JVM内部获取Java进程的PID的简便方法,因此不要尝试使用PID来制定解决方案。
这样的事情应该可以解决问题:
private static final int PORT = 9999;private static ServerSocket socket;private static void checkIfRunning() { try { //Bind to localhost adapter with a zero connection queue socket = new ServerSocket(PORT,0,InetAddress.getByAddress(new byte[] {127,0,0,1})); } catch (BindException e) { System.err.println("Already running."); System.exit(1); } catch (IOException e) { System.err.println("Unexpected error."); e.printStackTrace(); System.exit(2); }}此示例代码与之明确绑定
127.0.0.1,应避免任何防火墙警告,因为此地址上的所有流量都必须来自本地系统。
选择端口时,请避免使用“知名端口 ”
列表中提到的端口。理想情况下,应该在文件中或通过命令行开关使使用的端口可配置,以防发生冲突。



