Java单一异常线程中的异常" main" java.net.BindException:已在使用的地址:JVM_Bind

时间:2017-12-08 20:00:20

标签: java

我有服务器端我试图让它成为Singeltone以便从另一个类中获取服务器metodtds,但是当我运行服务器main然后我从另一个类执行Server.getInstance()时它会抛出这个期望:

  

线程中的异常" main"   java.net.BindException:已在使用的地址:JVM_Bind

我尝试了很多东西,但它不起作用

 private static Server serverinstance = null;
        private static Object obj=new Object();

        public Server() throws IOException {
            server = new ServerSocket(222);
            hash = new HashMap<String, SocketData>();
        }


        public static Server getInstance() throws IOException {
            synchronized (obj) {
                if (serverinstance == null) {
                    serverinstance = new Server();
                    serverinstance.listenServer();
                }
                return serverinstance;
            }
        }

        private void listenServer() throws IOException {
            while (flag) {
                ans = server.accept();
                if (serverinstance != null)
                    new EchoThread(serverinstance, ans);
            }
        }

    public static void main(String args[]) throws IOException {
            Server.getInstance();
        }

    Class A()
    {
    public A()
    {
    Server.getInstance();
    }
    }

2 个答案:

答案 0 :(得分:0)

尝试重新启动计算机。这是因为另一个程序已经在使用端口222,因此您的程序无法监听它。如果这不起作用,尝试将222切换到不同的东西,例如8000或9999,基本上是1000-65535之间的任何数字(如果你在Windows上,则为0-65535)

答案 1 :(得分:0)

Java singleton仅为每个JVM和每个ClassLoader保证一个实例。

在您的情况下,您通过调用两个单独的Server方法将相同的main类加载到两个不同的JVM和类加载器中。这会导致Server构造函数被调用两次,从而尝试在同一个222端口上创建两个ServerSocket

一个快速的解决方案是直接或间接地从调用A的{​​{1}}方法创建类main