I have a code that I need running for several hours. After several minutes it stops responding altogether (and I have to force quit the application) and gives me the error "NullPointer Exception" and highlights line 106. I have not been able to solve this, it may be because it runs out of pixels to grab? I am not sure. Another issue I am having is that it is using both my USB camera and my built-in mac camera. How do I get it to only use the USB camera? final int kTotalGlitches=10; int currGlitch=0; PImage img; ArrayList glitches;
final int kGlitchState=0;
final int kCamState=1;
int state=kCamState;
// ---------------------------------
final int kGlitchTimeLapse=7000; // 2 secs
final int kCamTimeLapse=5000; //8 secs
int triggerTime;
// ---------------------------------
import processing.video.*;
Capture cam;
Capture video;
void setup() {
size(1024, 768);
imageMode(CENTER);
glitches = new ArrayList <GlitchClass>();
for (int i=0; i<kTotalGlitches; i++)
glitches.add(new GlitchClass());
cam = new Capture(this);
cam.start();
triggerTime=millis()+kCamTimeLapse;
img = cam;
video = new Capture(this, width, height);
video.start();
}
void draw() {
if (millis()>=triggerTime) {
if (state==kCamState) {
state=kGlitchState;
triggerTime+=kGlitchTimeLapse;
currGlitch=int(random(kTotalGlitches)); //Select new glitch
} else {
state=kCamState;
triggerTime+=kCamTimeLapse;
}
}
if (state==kCamState)
image(cam, width/2, height/2);
else {
background(0);
glitches.get(currGlitch).display();
}
}
void captureEvent(Capture camera) {
camera.read();
img = createImage(width, height, RGB);
video.loadPixels();
arrayCopy(video.pixels, img.pixels);
}
//A glitch is just two ellipses overlapping on top of each other with different
//colors and one being rotated by 90 degrees.
class GlitchClass {
void display() {
loadPixels();
int randPos = 0;
if (frameCount % 100 == 0)
randPos = (int)random(0, video.height -4);
int randPosY = 0;
// if (frameCount % 100 == 0)
randPosY = (int)random(20, 50);
// Begin a loop for displaying pixel rows of 4 pixels height
for (int y = 0; y < video.height -57; y++) {
if (img != null) {
img.loadPixels();
// Put 4 rows of pixels on the screen
if (frameCount % 50 == 0)
randPosY = (int)random(20, 50);
for (int x = 0; x < video.width; x++) {
if (frameCount % 100 == 0)
randPosY = (int)random(20, 50);
if (y < video.height -4) {
pixels[x + (y + 0 + randPosY)* width] = img.pixels[ (y + 0 )* video.width + randPos + x];
pixels[x + (y + 1 + randPosY) * width] = img.pixels[ (y + 1) * video.width + randPos + 1 + x];
pixels[x + (y + 2 + randPosY) * width] = img.pixels[ (y + 2) * video.width + randPos + 2 + x];
pixels[x + (y + 3 + randPosY) * width] = img.pixels[ (y + 3) * video.width + randPos + 3 + x];
pixels[x + (y + 4 + randPosY)* width] = img.pixels[ (y + 4 )* video.width + randPos + 4 + x];
pixels[x + (y + 5 + randPosY) * width] = img.pixels[ (y + 5) * video.width + randPos + 5 + x];
pixels[x + (y + 6 + randPosY) * width] = img.pixels[ (y + 6) * video.width + randPos + 6 + x];
pixels[x + (y + 7 + randPosY) * width] = img.pixels[ (y + 7) * video.width + randPos + 7 + x];
}
}
} else {
break;
}
}
updatePixels();
}
}
Thanks!