2015-01-17 4 views
1

누군가 나를 도울 수 있습니까?Null 포인터 예외 처리시

1;2;3/4;5;6/7;8;9 //new line

코드는 3 개 위치 각각 플로트 3 개 어레이에 직렬이 데이터 분할을 취할 supossed 하였다 (: I는 자이로 전송 아두 이노 접속 이와 같이 시리얼 throught를 값을 가질 X, Y 및 Z라고 함)이 값에 따라 3 축을 그립니다.

이 내 실제 코드 :

int radius = 100; 

import processing.serial.*; 

int lf = 10; //Linefeed (new line) on ASCII 
String myString = null; 
Serial myPort; // Serial port for communication 

String[] dataLine; 
float[] X; 
float[] Y; 
float[] Z; 

float time, lastTime; 

void setup() 
{ 
    size(500, 500, P3D); 

    println (Serial.list()); //List avaible serial ports 
    myPort = new Serial (this, Serial.list()[0], 9600); //Assign the first available to the program 
    myPort.clear(); 
    myString = myPort.readStringUntil(lf); //Read what is on the serial until a new line 
    myString = null; //Throw away what was on the serial 
} 

void draw() 
{ 

    background(255); 
    pushMatrix(); 
    translate(radius,radius,radius); 

    stroke(255,0,0); 
    line(0, 0, 0, X[0], X[1], X[2]); 
    stroke(0,255,0); 
    line(0, 0, 0, Y[0], Y[1], Y[2]); 
    stroke(0,0,255); 
    line(0, 0, 0, Z[0], Z[1], Z[2]); 
    popMatrix(); 

    noLoop(); 
} 

void serialEvent (Serial myPort) 
{ 

    if (myPort.available() > 0) 
    { 
    String myString = myPort.readStringUntil(lf); 
    if (myString.length() == 17) 
    { 
     dataLine = split(myString, '/'); 

     X = float(split(dataLine[0], ';')); 
     print(X[0] + ";" + X[1] + ";" + X[2]); 
     println(); 

     Y = float(split(dataLine[1], ';')); 
     print(Y[0] + ";" + Y[1] + ";" + Y[2]); 
     println(); 

     Z = float(split(dataLine[2], ';')); 
     print(Z[0] + ";" + Z[1] + ";" + Z[2]); 
     println(); 
    } 
    } 
    redraw(); 
} 

`

문제는 내가이 오류를 수신하는 대신 코드를 실행하고 있다는 것입니다 :

COM3 
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 processing.core.PApplet.run(PApplet.java:2256) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at sketch_DCM_print.draw(sketch_DCM_print.java:53) 
    at processing.core.PApplet.handleDraw(PApplet.java:2386) 
    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(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

답변

0

가능성이 후보에 보인다 Draw를 입력하면 X, YZnull이됩니다. myString.length() != 17 인 경우 발생합니다. 직렬 이벤트 핸들러에 null을 남겨 두지 만 배열을 사용할 때이 문제가 발생하지는 않습니다. 디버거를 사용하십시오.

+0

그게 문제였습니다! 고맙습니다! 그러나 지금은 또 다른 문제가 있습니다 'COM3 오류, COM3 null' – Rafael

+0

@Rafael에 대한 serialEvent()를 사용하지 : 다른 스레드를 열어야을 –