First of all I am new to Java so I apologize if this is an obvious answer.
I am using Processing in Java to read the input values coming from a usb port.
Here is the custom class I set up to get the values. I call the getCurrentValue() method and it throws the NullPointerException.
import processing.core.PApplet;
import processing.serial.*;
import java.util.HashMap;
import java.util.ArrayList;
import java.io.File;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
public class Seismograph extends PApplet{
private int currentValue, verticalOffset = 0;
private int zero = 32768; // .5 of maximum seismograph value
private int adjustSeis = 68; // devide seismograph data by adjustSies to scale
public String theSeisPort = "COM20";
private Serial seisPort;
public void Seismograph(){
currentValue = 0;
seisPort = new Serial(this, "COM20", 38400);
}
public int getCurrentValue(){
byte[] inBuffer = new byte[2]; // value for seis - 2 bytes
while (seisPort.available() > 0) { // verify serial port
inBuffer = seisPort.readBytes();
seisPort.readBytes(inBuffer); // read bytes into buffer
if (inBuffer != null) {
String seisString = new String(inBuffer); // capture value
float seisFloat = PApplet.parseFloat(seisString); // convert value to float
int seisInt = PApplet.parseInt((seisFloat-zero)/adjustSeis); // adjust data to fit screen
seisInt = seisInt+(height/2)-verticalOffset; // center data vertically
currentValue = seisInt;
}
}
return this.currentValue;
}
}
It throws the error because of line 40 at seisPort.available() The error message:
Exception in thread "Animation Thread" java.lang.RuntimeException: java.lang.NullPointerException
at com.jogamp.common.util.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58)
at jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:103)
at jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:206)
at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:172)
at javax.media.opengl.Threading.invoke(Threading.java:191)
at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:541)
at processing.opengl.PJOGL.requestDraw(PJOGL.java:688)
at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1651)
at vialab.SMT.renderer.PGraphics3DDelegate.requestDraw(PGraphics3DDelegate.java:1450)
at processing.core.PApplet.run(PApplet.java:2254)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.NullPointerException
at seismic.Seismograph.getCurrentValue(Seismograph.java:40)
at seismic.seismograph_jan22c_1_1.draw(seismograph_jan22c_1_1.java:102)
at processing.core.PApplet.handleDraw(PApplet.java:2384)
at processing.opengl.PJOGL$PGLListener.display(PJOGL.java:862)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:665)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:649)
at javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1289)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1119)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:994)
at javax.media.opengl.awt.GLCanvas$11.run(GLCanvas.java:1300)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
I have been stuck on this for awhile, any feedback is appreciated.
Look at your constructor:
Notice that you've included a void keyword in the method signature. Constructors do not have a return type, so this will be treated as a method instead of a constructor. This will not be called when you create a new instance of
Seismograph
, so yourseisPort
is null.To fix this, simply remove the
void
keyword.