【问题标题】:Null Pointer Exception on Processing处理时出现空指针异常
【发布时间】:2015-01-17 18:34:24
【问题描述】:

有人可以帮助我吗? 我有一个陀螺仪连接到 Arduino 发送,以这种方式通过串口发送值:

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

代码应该在串行上获取这些数据,拆分为 3 个浮点数组,每个数组有 3 个位置(称为 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)

【问题讨论】:

    标签: nullpointerexception arduino processing


    【解决方案1】:

    当您进入 draw 时,可能的候选人似乎是 XYZnull。如果myString.length() != 17 会发生这种情况。您将它们 null 留在您的串行事件处理程序中,但您没有考虑使用数组时发生的这种情况。使用您的调试器。

    【讨论】:

    • 这就是问题所在!谢谢!但是现在,我又遇到了一个问题:COM3 Error, disabling serialEvent() for COM3 null
    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2013-10-29
    相关资源
    最近更新 更多