我在Eclipse中尝试了hand_gesture_recognition的Blobscanner。
这里有一行用来获取像素的红色值:
int [] Background;
void Set(PImage I){
for(int i=0; i<I.width*I.height; i++){
int iP=I.pixels[i];
Background[i*3]=(int)red(iP);
}
}
最后一行是这个错误的原因:
Exception in thread "Animation Thread" java.lang.NullPointerException
at processing.core.PApplet.red(Unknown Source)
at Test$PBGS.Set(Test.java:475)
at Test$PBGS.<init>(Test.java:466)
at Test.setup(Test.java:39)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我猜这与在Eclipse中实现Processing有关,您必须将color
类型更改为int
。那么,如果您想在Eclipse中使用Processing,是否有任何方法可以更改/实现这个red()方法?
NullPointerExceptions
不应该是color
和int
之间类型转换的结果,并且在任何情况下red()
返回float
,因此您的强制转换应该工作良好。
我假设你初始化了你的数组,因为堆栈跟踪似乎显示错误不是由该赋值引起的…
查看PApplet
的Processing源代码,我看到red()
的定义:
public final float red(int rgb) {
return g.red(rgb);
}
其中g
声明为
public PGraphics g;
根据我对源代码的快速扫描,似乎g
只在init()
方法或public void size(final int w, final int h, String renderer, String path)
方法中初始化。
查看您的堆栈跟踪,似乎g
尚未初始化。您是否在代码的其他地方调用了init()
或size()
?
public final float red(int rgb) {
float c = (rgb >> 16) & 0xff;
if (colorModeDefault) return c;
return (c / 255.0f) * colorModeX;
}
所以没有什么可以抛出NullPointerException
,因为它都是数学。我的第一个猜测是red()
需要的PGraphics
对象从未初始化。