2009-06-10 20 views
0

私は、コンピュータとサーバを追加してイーサネットポートを持つ2つのオブジェクトを接続できるjavaでシンプルなネットワークを構築しています。これは、私が "this.etherPort.addElement(t);"を呼び出すときに、ヌルポインタ例外がスローされる場所です。Javaのヌルポインタ例外の手助け

import java.util.Vector; 

public class Server extends Computer{ 

    public Vector<Ethernet> etherPort; 

    public void addPort(Ethernet t) 
    { 
    this.etherPort.addElement(t); 
    } 
} 

私はこのコードを使用して、新しいイーサネットオブジェクトを作成するときに、このコードが実行されます。

public class Ethernet { 

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); } } }

答えて

10

あなたのetherPortメンバーをインスタンス化する必要があります。

public class Server extends Computer{ 

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

    public void addPort(Ethernet t) 
    { 
     this.etherPort.addElement(t); 
    } 
} 

あなたはのaddportは()ただし、お使いのコンピュータのコンストラクタから呼び出されるメソッドをオーバーライドしていないことを確認する必要があります。文脈を前提にすると、私はそれが安全だと判断します(つまりコンピュータにはaddPort()メソッドがありません)。

コメントで以下に述べたように、それはコンテナの実装を制約しないインタフェースを使用することが一般的に良いでしょう:あなたはより良い代わりに

Vector<Ethernet> 

List<Ethernet> 

としてetherPortを宣言したいです

を使用し、Vector固有のaddElementメソッドの代わりにetherPort.add(element)を使用します。

2

etherPortはnullです。あなたは明らかに実際のベクトルでそれを初期化することはありません。あなたが望むと思う:

public class Server extends Computer{ 

    public Vector<Ethernet> etherPort; 

    public Server() 
    { 
     etherPort = new Vector<Ethernet>(); 
    } 

    public void addPort(Ethernet t) 
    { 
     this.etherPort.addElement(t); 
    } 
} 
3

ベクトルを初期化していません。次のようになります。

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

おそらく非公開にする必要があります。リスト etherPorts = new ArrayList ();ファイナルはエラーを捕らえていたでしょう。 –

関連する問題