2011-12-14 4 views
0

NullPointerExceptionを引き起こす原因を指摘する助けが必要です。私は理解しているものからすべてを試しましたが、まだ運がありません。Java:NullPointerExceptionを指摘する助けが必要

import com.threed.jpct.Object3D; 

public class HelloShader extends Activity implements OnScaleGestureListener { 

    private float ind = 0; 
    private boolean doLoop = true; 
    private Ticker ticker = new Ticker(15); 
    private Object3D snork = null; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startLoop(); //NullPointerException according to LogCat 
    } 

    public void initialize(){ 
     snork = Loader.loadMD2(res.openRawResource(R.raw.image), 0.5f); 
     snork.translate(0, 50, 0); 
     Texture snorkTexture = new Texture(res.openRawResource(R.raw.imagetexture)); 
     tm.addTexture("snorkText", snorkTexture); 
     snork.setTexture("snorkText"); 
    } 

    public void startLoop(){ 

     long ticks = 0; 

     while (doLoop) { 

      ticks = ticker.getTicks(); 
      if (ticks > 0) { 

       animate(ticks); //NullPointerException according to LogCat 
      } 
     } 
    } 

    private void animate(long ticks) { 
     if (ticks > 0) { 
      float ft = (float) ticks; 
      ind += 0.02f * ft; 
      if (ind > 1) { 
       ind -= 1; 
      } 
      snork.animate(ind, 2); //NullPointerException according to LogCat 

     } 
    } 

    private static class Ticker { 

     private int rate; 
     private long s2; 

     public static long getTime() { 
      return System.currentTimeMillis(); 
     } 

     public Ticker(int tickrateMS) { 
      rate = tickrateMS; 
      s2 = Ticker.getTime(); 
     } 

     public int getTicks() { 
      long i = Ticker.getTime(); 
      if (i - s2 > rate) { 
       int ticks = (int) ((i - s2)/(long) rate); 
       s2 += (long) rate * ticks; 
       return ticks; 
      } 
      return 0; 
     } 
    } 

これはエラーを返すコードのほんの一部であり、全体のコードは、他の部分がエラーとは無関係であるため、私はそれらすべてを投稿していなかった非常に長いです。私は、NullPointerExceptionを返す行のコメントを書きました。事前にありがとう=)追加情報が必要な場合はお知らせください。 Apparentlyy snork

+3

stacktraceは、発生する行を教えてください。直前にいろいろな変数がnullであれば、いくつかのsystem.out.printlnメッセージを追加して出力することもできます。あなたがIDEにいるなら、デバッガを使って何かを見て、 – Richard

+2

のinitialize()メソッドを決して呼び出すことはできません。 snork = Loader.loadMD2(res.openRawResource(R.raw.image)、0.5f)を開始します。 snorkオブジェクト。 – Ashish

答えて

3

はどちらかinitialize()onCreate()が行う前に実行、またはLoader.loadMD2()戻りnullに呼び出していないことを意味し、nullです。

5

onCreateの間に呼び出されるanimateを呼び出す前に、initializeを呼び出していません。だからsnorkはnullです。あなたがまだ割り当てられていない状態s2の値をチェックするとき、

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    initialize(); 
    startLoop(); 
} 
+0

'initialize()'を他の場所で呼び出した場合、おそらく 'Loader.loadMD2(res.openRawResource(R.raw.image)、0.5f) 'の呼び出しはnullを返すので、' snork'にはヌル値を与えます。 –

+0

@Zéychin:それはAndroidのアクティビティだと思いますが、onCreateはフレームワークが構築した最初のことです。 onCreateが呼び出される前に手動で初期化を呼び出す時間はありません。 – Guillaume

+0

これがAndroidのアクティビティであることはわかりませんでした。 Androidタグはなく、Android開発は自分のドメインではありません。それを指摘していただきありがとうございます。 –

0

あなたのdidnt intialize S2:

はあなたの onCreateに変更

if (i - s2 > rate) { 
+0

彼はそれをティッカーコンストラクタで初期化しました。 –

+0

@HarryJoyありがとう、私はちょうど見た。 – HRgiger