Получение исключения NullPointerException при попытке передать ArrayList другому классу

В моем текущем проекте у меня есть ArrayList PVectors, в которых хранятся координаты xyz для трехмерных точек. Я передаю ArrayList другому классу, который манипулирует им, однако при этом я получаю исключение NullPointerException. Я предполагаю, что один из PVectors имеет значение null, но я проверил это, назначив любые нулевые объекты (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();
}

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


person Miles    schedule 14.01.2011    source источник


Ответы (3)


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

person jerluc    schedule 14.01.2011
comment
Ты опередил меня на 19 секунд ;-) - person Dan Breslau; 14.01.2011
comment
Действительно? Обычно это случается со мной все время... иногда это место кажется таким активным... - person jerluc; 14.01.2011

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

person Dan Breslau    schedule 14.01.2011

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

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

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

Обновить

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

Мои +1 к Dan Breslau и jerluc

person Favonius    schedule 14.01.2011