Получение NullPointerException при попытке передать ArrayList другому классу - PullRequest
0 голосов
/ 14 января 2011

В моем текущем проекте у меня есть ArrayList из PVectors, в котором хранятся координаты xyz для 3d-точек. Я передаю ArrayList другому классу, который им манипулирует, однако при этом я получаю исключение NullPointerException. Я предполагаю, что один из PVectors является нулевым, но я проверил это, назначив любые нулевые объекты (0,0,0), и все еще получаю ошибку. Кроме того, более эффективно иметь массив PVectors или ArrayList из PVectors? В любом случае, я все еще получаю ошибку. Вот линия, которая производит это.

 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();
}

Я могу вставить больше классов, если это поможет прояснить проблему. Спасибо!

Ответы [ 3 ]

5 голосов
/ 14 января 2011

Вы не инициализируете свою переменную trip, и поэтому вызов trip.pass (..) вызовет исключение NullPointerException.

4 голосов
/ 14 января 2011

Вы, кажется, никогда не присваиваете значение переменной trip.Это, безусловно, приведет к NullPointerException в строке, которую вы показали.

1 голос
/ 14 января 2011

Из вашего фрагмента кода трудно , чтобы получить источник вашей проблемы.Но мое первое предположение - проблема с потоками.

Вы пытаетесь использовать trip.pass(pointCoordinates); в рабочем потоке.Хотя кажется, что ArrayList pointCoordinates = new ArrayList(); не является частью этого потока.

Возможное решение: проверить, инициализирован pointCoordinates или нет.Если нет, то дождитесь его инициализации.

Обновление

Мой плохой.Я пропустил инициализацию объекта поездки.: (

Мой +1 к Dan Breslau и jerluc

...