2011-02-26 5 views
0

私はこの問題の解決法を検索して検索しましたが、誰もそれを経験していないようです。ここに説明があります:MacではNullPointerExceptionが発生しますが、Windowsでは使用できません!

私はいくつかの共同プログラマーとタイルベースのゲームを作成しています。データベースクラスを使用して、ファイルや画像の読み込みを行います。私のMacが突然私の顔にNullPointerExceptionをスローするまで、すべてがうまくいきます。奇妙なことは、それは別の男のMac(同じモデルとすべて)で動作し、エラーの数分前に私のコンピュータで正常に動作したことです。その間に何も変更されていません。

これは以前から起きていましたが、問題を分類したOSを再インストールしたので、Eclipse(私はIDEとして使用しています)またはMacOSのいずれかの調整が必要です。誰もがアイデアを持っていますか?

プロジェクトはで見つけることができます: https://github.com/Gadamagaska/Quantum-Man

私のスタックトレース:

Exception in thread "main" java.lang.NullPointerException 
    at entities.Level.getTile(Level.java:24) 
    at database.Database.getTile(Database.java:206) 
    at core.FoffyMain.drawBottomTiles(FoffyMain.java:82) 
    at core.FoffyMain.draw(FoffyMain.java:64) 
    at core.Core.gameLoop(Core.java:58) 
    at core.Core.run(Core.java:34) 
    at core.FoffyMain.main(FoffyMain.java:28) 
+0

を持つことができます。おそらく競争状態ですか? – Haakon

+0

Haakonが正しいです。私は境界チェックといくつかのアプリケーションにログを追加することをお勧めします –

+0

私の推測では、複数のスレッドの下でデータが部分的に初期化された状態で見えるということです。 –

答えて

0

あなたはこれがaddLayerは呼ばれていないことを意味し、層の配列は、まだヌルであることを意味し、この

public int getTile(int layer, int x, int y){ 
    if(layers!=null && layers.length > layer && layers[layer].length > y && layers[layer][y].length > x) 
    { 
     return layers[layer][y][x]; 
    } 
    return -1; 
} 

や簡単な取っ手のようなチェックnullポインタ例外

public int getTile(int layer, int x, int y) { 
    try{ 

    return layers[layer][y][x]; 
    } 
    catch(NullPointerException npe) 
    { 
     return -1; 
    } 
} 
+0

答えをありがとうが、それは私のMacでのみこれは問題であることを覚えておく必要があります。私たちはそれが完璧に動作する他のMacやWindowsシステムで試してみましたが、小切手はおそらく追加するべきものです! –

0

あなたはこれが唯一のあなたのMac上で起こりますか?

コードを見ると、Levelクラスが初期化される前にレイヤーメンバーにアクセスしようとしているようです。

addLayerメソッドの代わりにLevelのコンストラクタでレイヤを初期化しようとすると、問題を解決するか、少なくともその一部を解決する必要があります。

+0

それは他のMacでうまく動作しますが、私は間違いなくあなたのソリューションを試して、それが動作するかどうかを確認します。約20分後、再び私のラップトップにいるとき:) –

+0

私はこれを答えとしてマークしましたが、私はもう古い問題に戻っているようです。しかし、答えをありがとう。 –

関連する問題