2011-01-14 11 views
0

私の現在のプロジェクトでは、3D点のxyz座標を格納するPVectorsのArrayListがあります。 ArrayListを操作する別のクラスにArrayListを渡していますが、そのときにNullPointerExceptionが発生します。私はPVectorsの1つがnullであると仮定していますが、nullのオブジェクトを(0,0,0)に代入することでこれをチェックしましたが、まだエラーが発生しています。また、PVectorsの配列やPVectorsのArrayListを持つ方が効果的ですか?どちらの方法でも、私はまだエラーが発生しています。ここにそれを作り出す線があります。ArrayListを別のクラスに渡そうとするとNullPointerExceptionが発生する

trip.pass(pointCoordinates); 

そして、ここでの主なクラス

import org.openkinect.*; 
import org.openkinect.processing.*; 

Kinect kinect; 
Trip trip; 

boolean tripOn; 

int w = 640; 
int h = 480; 
int distance = 5; 

float[] depthLookUp = new float[2048]; 
ArrayList pointCoordinates = new ArrayList(); 

float factor = 400; 
float a = 0; 
float angle = 0; 
float frequency = .05; 

void setup() { 
    size(800,600,P3D); 
    kinect = new Kinect(this); 
    kinect.start(); 
    kinect.enableDepth(true); 
    kinect.processDepthImage(false); 
    stroke(255); 
    for (int i = 0; i < depthLookUp.length; i++) { 
    depthLookUp[i] = rawDepthToMeters(i); 
    } 
    for(int i = 0; i < 31920; i++) { 
    pointCoordinates.add(new PVector(0, 0, 0)); 
    } 
} 

void draw() { 
    background(0); 
    pushMatrix(); 
    translate(width/2 + width/3,height/2, -200); 
    //add 1/3 width to account for rule of thirds 
    popMatrix(); 
    int[] depth = kinect.getRawDepth(); 
    calculate(depth); 
    if(!tripOn) { 
    for(int i = 0; i < pointCoordinates.size(); i++) { 
    PVector temp = (PVector) pointCoordinates.get(i); 
    point(temp.x, temp.y, temp.z); 
    } 
    } 
    if(frameCount % 10 == 0) { 
    if(tripOn) { 
    tripOn = false; 
    trip.clear(); 
    } 
    else { 
    tripOn = true; 
    trip.pass(pointCoordinates); 
    } 
    } 
    if(tripOn) trip.run(); 
} 

void stop() { 
    kinect.quit(); 
    super.stop(); 
} 

であることが、問題を明確にすることができます場合、私はそれ以上のクラスを貼り付けることができます。ありがとう!

+0

あなたは19秒本当に;-) – skaffman

答えて

5

あなたはNullPointerExceptionがスローう変数、したがって、コール(..)trip.passためにあなたの "旅" を初期化されていません。

+1

間違いを表示しますか?それはたいていいつも私に起こります。この場所は時にはとても活発に見えます.. –

+2

によってそれに私を打つ – jerluc

1

コードスニペットのハードから問題の原因を取得してください。しかし、私の最初の推測はスレッドの問題です。

ワーカースレッドでtrip.pass(pointCoordinates);を使用しようとしています。 ArrayList pointCoordinates = new ArrayList();はそのスレッドの一部ではありません。

可能な解決策は次のとおりです。 pointCoordinatesが初期化されているかどうかを確認します。そうでなければ、それが初期化されるのを待ちます。

更新

私の悪いです。私はトリップオブジェクトの初期化を逃してしまった。 :(

マイ+1 Dan Breslauにとjerluc

4

あなたは決して思えません変数tripに値を代入する。確かにあなたが示されてきたラインでNullPointerExceptionを引き起こすだろうと。

関連する問題