java.lang.RuntimeException:java.lang.NullPointerException处理
因此,基本上,我正在尝试创建一个有点复杂的(对于我的编程水平)并尝试使用kinect触发不同的绘图。 我为这么多的代码感到非常抱歉,但是这个错误正在慢慢地让我发疯java.lang.RuntimeException:java.lang.NullPointerException处理,java,nullpointerexception,awt,processing,event-dispatch-thread,Java,Nullpointerexception,Awt,Processing,Event Dispatch Thread,因此,基本上,我正在尝试创建一个有点复杂的(对于我的编程水平)并尝试使用kinect触发不同的绘图。 我为这么多的代码感到非常抱歉,但是这个错误正在慢慢地让我发疯 Car worldmap; Hotpoint ColorTrigger; import processing.opengl.*; import SimpleOpenNI.*; SimpleOpenNI kinect; float rotation = 0; int boxSize = 150; PVector blueboxCen
Car worldmap;
Hotpoint ColorTrigger;
import processing.opengl.*;
import SimpleOpenNI.*;
SimpleOpenNI kinect;
float rotation = 0;
int boxSize = 150;
PVector blueboxCenter = new PVector(200, 800, 600);
PVector boxCenter = new PVector(0, 0, 600);
float s = 1;
void setup() {
size(displayWidth, displayHeight, OPENGL);
SimpleOpenNI kinect = new SimpleOpenNI(this);
kinect.enableDepth();
ColorTrigger = new Hotpoint(200, 0, 600, 150);
}
void draw() {
if (keyPressed == true) {
background(0);
kinect.update();
translate(width/2, height/2, -1000);
rotateX(radians(180));
translate(0, 0, 1400);
rotateY(radians(map(mouseX, 0, width, -180, 180)));
translate(0, 0, s*-1000);
scale(s);
stroke(255);
PVector[] depthPoints = kinect.depthMapRealWorld();
int depthPointsInBox = 0;
for (int i = 0; i < depthPoints.length; i+=10) {
PVector currentPoint = depthPoints[i];
point(currentPoint.x, currentPoint.y, currentPoint.z);
ColorTrigger.check(currentPoint);
}
ColorTrigger.display();
ColorTrigger.clear() ;
ColorTrigger.wasJustHit = ColorTrigger.currentlyHit();
ColorTrigger.pointsIncluded = 0;
} else {
worldmap.display();
}
}
class Hotpoint {
PVector center;
color fillColor;
color strokeColor;
int size;
int pointsIncluded;
int maxPoints;
boolean wasJustHit;
int threshold;
float Gotme;
Hotpoint(float centerX, float centerY, float centerZ, int boxSize)
{
center = new PVector(centerX, centerY, centerZ);
size = boxSize;
pointsIncluded = 0;
maxPoints = 1000;
threshold = 0;
fillColor = strokeColor = color(random(255), random(255), random(255));
}
void setThreshold( int newThreshold ) {
threshold = newThreshold;
}
void setMaxPoints(int newMaxPoints) {
maxPoints = newMaxPoints;
}
void setColor(float red, float blue, float green) {
fillColor = strokeColor = color(red, blue, green);
}
boolean check(PVector point) {
boolean result = false;
if (point.x > center.x - size/2 && point.x < center.x + size/2) {
if (point.y > center.y - size/2 && point.y < center.y + size/2) {
if (point.z > center.z - size/2 && point.z < center.z + size/2) {
result = true;
pointsIncluded++;
}
}
}
return result;
}
void display() {
float Gotme = map(pointsIncluded, 0, 1000, 0, 255);
translate(center.x, center.y, center.z);
rotateY(-PI/6);
rotateY(radians(frameCount));
println(Gotme);
fill(255, 0, 0, Gotme);
stroke(255, 0, 0);
box(boxSize);
}
boolean currentlyHit() {
return (pointsIncluded > threshold);
}
boolean isHit() {
return currentlyHit() && !wasJustHit;
}
void clear() {
wasJustHit = currentlyHit();
pointsIncluded = 0;
}
}
class Car {
color c;
float xpos;
float ypos;
float xspeed;
// The Constructor is defined with arguments.
Car(color tempC, float tempXpos, float tempYpos, float tempXspeed) {
c = tempC;
xpos = tempXpos;
ypos = tempYpos;
xspeed = tempXspeed;
}
void display() {
stroke(0);
fill(c);
rectMode(CENTER);
rect(xpos, ypos, 20, 10);
}
void drive() {
xpos = xpos + xspeed;
if (xpos > width) {
xpos = 0;
}
}
}
我想,我发现了错误: 首先将
kinect
声明为类属性,然后在setup()
-方法中声明一个新对象nemedkinect
。局部变量隐藏了class属性,因此kinect.enableDepth()代码>引用局部变量,而不是类属性
因此,class属性从未被赋值(就我所见),因此它保持为null
。调用draw()
-方法时,它将在kinect.update()上失败因为它引用了class属性,该属性为null
。因为您试图将方法调用为null
-对象,Java抛出NullPointerException
您已经声明了SimplePenni kinect
变量(只是没有初始化为任何值),所以不要在setup()中重新定义它,只需将其赋值:
void setup() {
...
kinect = new SimpleOpenNI(this);
...
}
通过使用simplepenni kinect=new simplepenni(此)
您正在声明一个新变量,其作用域为“仅在setup()函数中处于活动状态”,因此当我们退出setup()时,该变量将被丢弃,全局kinect
仍然是空指针。您尝试过使用调试器吗?@Biffen我还没有,如何在处理过程中使用调试器?感谢您的快速回复@您是否有一个名为hotbox7的对象?@robin hotbox7实际上是草图的名称。原因:java.lang.NullPointerException at hotbox7.draw()我们可以理解的是,您调用了空对象(hotbox7)上的draw方法。这就是为什么你会出错。你能展示一下你是如何使用草图的吗?这很有道理,谢谢!解决此类问题的最佳方法是什么?@Kerim显然不是在setup()
中创建局部变量,而是使用class属性。。。
void setup() {
...
kinect = new SimpleOpenNI(this);
...
}