2011-06-14 7 views
0

OK、私はJavaに新しいスーパーではありませんが、何か奇妙な理由のために、なぜこれが私のために働いていないのかわかりません。基本的に私は自分のアプレットに3つのクラスを持っています。nullを返すデータクラスからのデータへのアクセス

私のメイン、私の文字列コンストラクタ、および私のデータクラス。

メインクラスは文字列コンストラクタを呼び出し、文字列コンストラクタはその最終製品をデータクラスに格納します。最後に、私はメインクラスを使用してデータクラスにアクセスしようとしています。

メインへの戻り値は常にnullです。理由を把握できません。私の疑惑はどういうわけか2つの別々のデータクラスオブジェクトを作成していますが、コードの例を見てみるとすべて正しいようです。ここにクラスがあります..

メイン。

public class LaneGUI extends javax.swing.JApplet { 

private laneData laneData; 


Timer timer; 
/** Initializes the applet LaneGUI */ 
public void init() {   

    laneData = new laneData(); 
    xmlParser.parseInputString(connection.getFinalXMLString()); 
    System.out.println(laneData.getLaneID()); 

文字列コンストラクタ...

public class XMLParser { 

private laneData laneData; 


public void parseInputString(String input){  
    try{  
    /*some xmlparsing*/   
    laneData = new laneData(); 
    laneData.setLaneID(string); 

データクラス

public class laneData { 
private String laneID; 

public String getLaneID() { 
    return laneID; 
} 

public void setLaneID(String laneID) { 
    this.laneID = laneID; 
} 

} 

文字列クラスで、私はXML解析の全てを出したように、編集の多くは、ここにありますし、文字列の編集。

基本的には、文字列コンストラクタでgetLaneIDを設定した後、その値が正しいことを確認します。しかし、私はメインから取得する、そのnull。

+1

'private laneData laneData;' <==悪い考え –

答えて

1

XMLParserとLaneGUIは、laneDataの2つの異なるインスタンスを参照しています。

代わりにこれを言うLaneGUI、中にあなたの最後の行の:あなたはこのような何か必要

System.out.println(laneData.getLaneID()); 

System.out.println(xmlParser.getLaneData().getLaneID()); 

をあなたはまた、クーゼの、getLaneDataを追加する必要があります( )を返します。

+0

Hmm。 OK。私が何をしようとしているのを見た後で、1つのクラスにデータでいっぱいにする方が簡単です。他の多くのクラスから簡単にアクセスできますか?それともすべてについてこの種のラウンドに入っていなければなりませんか? – JMD

+0

入力された 'laneData'インスタンスにアクセスするには、そのインスタンスへの参照が必要です。このアクセスを可能にする方法はたくさんあります(たとえば、所有するクラスのアクセサを使用してインスタンスを利用できるようにする、メソッドパラメータを介して関心のあるクライアントにインスタンスへの参照を渡すなど) –

+0

問題のクラスをシングルトンにします。それを行う方法の良い例は、Joshua BlochのEffective Javaを参照してください。 –

0

あなたが正しく推測すると、laneDataという2つの異なるインスタンスがあります。 XMLParserクラスは、LaneGUIによって参照されるインスタンスとは異なるlaneDataのローカルインスタンスを持っています。

関連する問題