“线程中的Java SingleOne异常”;“主要”;java.net.BindException:地址已在使用中:JVM\u Bind
我在服务器端尝试将其设置为SingleTone,以便从另一个类访问服务器metodtds,但当我运行Server main,然后从另一个类执行“线程中的Java SingleOne异常”;“主要”;java.net.BindException:地址已在使用中:JVM\u Bind,java,Java,我在服务器端尝试将其设置为SingleTone,以便从另一个类访问服务器metodtds,但当我运行Server main,然后从另一个类执行Server.getInstance()时,它抛出以下期望: 线程“main”中出现异常 java.net.BindException:地址已在使用中:JVM\u Bind 我试了很多东西,但都不管用 private static Server serverinstance = null; private static Object ob
Server.getInstance()
时,它抛出以下期望:
线程“main”中出现异常
java.net.BindException:地址已在使用中:JVM\u 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();
}
}
private静态服务器serverinstance=null;
私有静态对象obj=新对象();
公共服务器()引发IOException{
服务器=新服务器套接字(222);
hash=新的HashMap();
}
公共静态服务器getInstance()引发IOException{
同步(obj){
if(serverinstance==null){
serverinstance=新服务器();
serverinstance.listenServer();
}
返回服务器实例;
}
}
私有void listenServer()引发IOException{
while(旗帜){
ans=server.accept();
if(serverinstance!=null)
新的EchoThread(serverinstance,ans);
}
}
公共静态void main(字符串args[])引发IOException{
getInstance();
}
A类()
{
公共A()
{
getInstance();
}
}
尝试重新启动计算机。这是因为另一个程序已经在使用端口222,所以您的程序无法侦听它。如果这不起作用,请尝试将222切换到不同的位置,比如8000或9999,基本上是1000-65535(如果您在Windows上,则为0-65535)之间的任何数字。Java singleton保证每个JVM和每个类加载器只能有一个实例
在您的例子中,通过调用两个独立的main
方法,将相同的Server
类加载到两个不同的JVM和类加载器中。这会导致调用两次服务器
构造函数,然后尝试在同一端口上创建两个服务器套接字
一个快速的解决方案是直接或间接地从调用
Server.getInstance()的main
方法创建类A
代码>@mat JVM bindexception表示端口已绑定到。如果您多次尝试更改端口,但都不起作用,那么您的笔记本电脑就会出现一些问题。如果它是Linux,请发布netstat
@mat的输出。好的,我不记得netstat的等价物,但您可以在网上轻松找到它(它是一个内置命令)当我试图从另一个类访问VARABLE时,它的值为null,因此getinstance在同一个端口上再创建一个serversocket,这就是抛出的例外。您在同一个VM上运行这两个吗?看起来您正在运行主程序,该程序将启动一个JVM,然后从另一个JVM调用Server.getInstance()
。如果是这种情况,那么您将创建两个单独的Server
对象,它们将尝试打开同一个端口。我使用main运行服务器,然后使用main运行class A class A,class A需要是客户机类,因此如果我想运行客户机几次,如何操作?