帮助Java中的空指针异常

0 java

我在java中组建了一个简单的模拟网络,我可以在其中添加计算机,服务器,并使用以太网端口连接两个对象.当我调用"this.etherPort.addElement(t);"时,这是抛出空指针异常的地方.

import java.util.Vector;

public class Server extends Computer{

     public Vector<Ethernet> etherPort; 

     public void addPort(Ethernet t)
  {
   this.etherPort.addElement(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

public class Ethernet {
Run Code Online (Sandbox Code Playgroud)

public Computer terminal1, terminal2; public int volume; public Ethernet(Computer term, Server term2) { this.terminal1 = term; this.terminal2 = (Computer) term2; if(term != null) { term.addPort(this); } if(term2 != null) { term2.addPort(this); } } }

import java.util.Vector;

public class Server extends Computer{

     public Vector<Ethernet> etherPort; 

     public void addPort(Ethernet t)
  {
   this.etherPort.addElement(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

public class Ethernet {
Run Code Online (Sandbox Code Playgroud)

public Computer terminal1, terminal2; public int volume; public Ethernet(Computer term, Server term2) { this.terminal1 = term; this.terminal2 = (Computer) term2; if(term != null) { term.addPort(this); } if(term2 != null) { term2.addPort(this); } } }

import java.util.Vector;

public class Server extends Computer{

     public Vector<Ethernet> etherPort; 

     public void addPort(Ethernet t)
  {
   this.etherPort.addElement(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

glm*_*ndr 10

您需要实例化etherPort成员:

public class Server extends Computer{

     public Vector<Ethernet> etherPort = new Vector<Ethernet>(); 

     public void addPort(Ethernet t)
     {
        this.etherPort.addElement(t);
     }
}
Run Code Online (Sandbox Code Playgroud)

但是,您应该确保addPort()不会覆盖从您的计算机构造函数调用的方法.鉴于上下文,我认为它是安全的(计算机没有addPort()方法).

如下面评论中所述,通常最好使用不限制容器实现的接口:您最好将etherPort声明为

List<Ethernet> 
Run Code Online (Sandbox Code Playgroud)

代替

Vector<Ethernet>
Run Code Online (Sandbox Code Playgroud)

并使用etherPort.add(element)代替Vector特定的addElement方法.