2011-12-17 10 views
-2

さて、私はこれを数時間解決しようとしてきましたが、これが起こっている理由を見つけることができません。私は値クラスの値を設定変数は設定されていますが、nullが返されます

public void loadFile() throws FileNotFoundException, IOException { 
    config = new File(m.getUser() + "AppData/Roaming/pseudpixel/config.cfg"); 
    FileReader fr = new FileReader(m.getUser() + "AppData/Roaming/pseudopixel/config.cfg"); 
    BufferedReader br = new BufferedReader(fr); 

    while((temp = br.readLine()) != null) { 
     if(temp.startsWith("screenName")) { 
      tempCache = temp.split(":"); 
      v.setScreenName(tempCache[1]); 
     } else if(temp.startsWith("screenWidth")) { 
      tempCache = temp.split(":"); 
      v.setScreenWidth(Integer.parseInt(tempCache[1])); 
     } else if(temp.startsWith("screenHeight")) { 
      tempCache = temp.split(":"); 
      v.setScreenHeight(Integer.parseInt(tempCache[1])); 
     } else if(temp.startsWith("debug")) { 
      tempCache = temp.split(":"); 
      v.setDebug(tempCache[1]); 
     } 

     br.close(); 
    } 
} 

public void setScreenName(String s) { 
    screenName = s; 
    m.log("ScreenName Set: " + getScreenName() + "\n"); 
} 

public String getScreenName() { 
    return screenName; 
} 

public void setScreenWidth(int i) { 
    screenWidth = i; 
    m.log("ScreenWidth Set: " + getScreenWidth() + "\n"); 
} 

public Integer getScreenWidth() { 
    return screenWidth; 
} 

public void setScreenHeight(int i) { 
    screenHeight = i; 
    m.log("ScreenHeight Set: " + getScreenHeight() + "\n"); 
} 

public Integer getScreenHeight() { 
    return screenHeight; 
} 

public void setDebug(String b) { 
    if(b.equals("true")) { 
     debug = true; 
     m.log("Debug Set:  " + getDebug() + "\n"); 
    } else { 
     debug = false; 
     m.log("Debug Set:  " + getDebug() + "\n"); 
    } 
} 

public boolean getDebug() { 
    return debug; 
} 

をし、すべては私のログによると、正常に動作するように私は1つで関与三つのクラスを、持っています。しかし、このクラスからgetメソッドで値を取得しようとすると、nullpointer例外が返されます。基本的に、外部クラスからgetメソッドを呼び出すと、すべての値がnullで返されます。彼らはloadFile()メソッドが終了した直後にこれを行うようです。

本当に残念ですが、このすべてが鳴っていたのです。私はこれを書いたときに私が何を考えていたのか分かりません。私はそれをすべて1行のコードで修正しました。

+5

デバッグについて聞いたことがありますか?私はそれがこの種の問題を解決するのに役立つと聞いています。さらに、コールサイトからコードを追加すると(失敗した場合)、おそらくもっと便利になります。 –

+2

文脈がなければ、この質問に答える方法はありません。 –

+2

私は上記の人に同意する必要があります - あなたが提示した情報に基づいて間違っていることを推測するESP経由の方法がありません。おそらくあなたの可変シャドーイングですが、誰が知っていますか? –

答えて

2

getメソッドで値をsetに設定することはできません。逆説的です。もちろん、あなたのコードを読んでいる人が嫌いで、設定にはget、変数を得るにはsetを使用してください。

このクラスのgetメソッドを使用して他の値を設定しようとしていると思われます。その場合は投稿し、SSCCEにしてください。しかし、あなたがそのコードを投稿していないので、私はここであまり助けになることはできません。あなたはconstructorを持っているよう

しかし、それはすべての値を初期化するために見ていません:

public Value() { 
    screenName = ""; 
    screenWidth = 0; 
    screenHeight = 0; 
    debug = false; 
} 

constructorのポイントは、自分の価値観の全てではないnullを作ることです。あなたが持っていないので、すべてはまだnullです。その後

、あなたは(それがタイプだと仮定するとValueです)vを初期化するとき、あなたはこのようなコンストラクタを呼び出す:

Value v = new Value(); 

コンストラクタはまた、インスタンス化によって選ばれた何かに値を事前に設定する引数を取ることができます。

+0

技術的には、メソッドの名前が不十分であれば可能です。 –

+1

@DaveNewton、はい、しかし、私は誰もがそれより優れているふりをするのが好きです。 – Jon

+8

あなたは若いです。あなたはそれから成長します。 –

2

あなたのbr.close()がwhileループ内にあることがわかりました。それと何か関係がありますか?

+0

+1私はあなたがそれを釘付けにしたと思う。彼は彼のconfig.cfgファイルから最大で1行だけを読み込み、処理を停止します。 – phatfingers

関連する問題