Java 为什么Eclipse中的程序在另一个IDE中工作时会出现空指针?

Java 为什么Eclipse中的程序在另一个IDE中工作时会出现空指针?,java,eclipse,processing,picking,processing-ide,Java,Eclipse,Processing,Picking,Processing Ide,我很难在Eclipse中运行一些代码。它是Java代码,包含来自处理的元素,在处理IDE中工作,但在Eclipse中会立即出现空指针异常。它还涉及另一个名为Picking的库。我有其他处理代码在Eclipse中运行良好,所以我怀疑这与挑选库有关 拾取jar在我的构建路径上,基于堆栈跟踪,我认为它可以被很好地访问 以下是堆栈跟踪: Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException at processing.

我很难在Eclipse中运行一些代码。它是Java代码,包含来自处理的元素,在处理IDE中工作,但在Eclipse中会立即出现空指针异常。它还涉及另一个名为Picking的库。我有其他处理代码在Eclipse中运行良好,所以我怀疑这与挑选库有关

拾取jar在我的构建路径上,基于堆栈跟踪,我认为它可以被很好地访问

以下是堆栈跟踪:

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at processing.opengl.PJOGL.enable(PJOGL.java:1640)
at processing.opengl.PGraphicsOpenGL.blendModeImpl(PGraphicsOpenGL.java:5947)
at processing.core.PGraphics.blendMode(PGraphics.java:1842)
at processing.core.PGraphics.defaultSettings(PGraphics.java:952)
at processing.opengl.PGraphicsOpenGL.defaultSettings(PGraphicsOpenGL.java:2003)
at processing.core.PGraphics.checkSettings(PGraphics.java:892)
at picking.Buffer.callCheckSettings(Unknown Source)
at picking.Picker.<init>(Unknown Source)
at PickingDemo.setup(PickingDemo.java:29)
at processing.core.PApplet.handleDraw(PApplet.java:2281)
at processing.opengl.PJOGL$PGLListener.display(PJOGL.java:862)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:652)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:636)
at javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1284)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1106)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:981)
at javax.media.opengl.awt.GLCanvas$11.run(GLCanvas.java:1295)
at javax.media.opengl.Threading.invoke(Threading.java:193)
at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:541)
at javax.media.opengl.awt.GLCanvas.paint(GLCanvas.java:595)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:308)
at java.awt.Component.dispatchEventImpl(Component.java:4736)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:674)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:633)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:647)
at java.awt.EventQueue$3.run(EventQueue.java:645)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:644)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
线程“AWT-EventQueue-1”java.lang.NullPointerException中的异常 at processing.opengl.PJOGL.enable(PJOGL.java:1640) 在processing.opengl.PGraphicsOpenGL.blendModeImpl(PGraphicsOpenGL.java:5947) 位于processing.core.PGraphics.blendMode(PGraphics.java:1842) 默认设置(PGraphics.java:952) 在processing.opengl.PGraphicsOpenGL.defaultSettings(PGraphicsOpenGL.java:2003) at processing.core.PGraphics.checkSettings(PGraphics.java:892) 在picking.Buffer.callCheckSettings(未知源)时 正在拾取。拾取者。(未知来源) 在PickingDemo.setup(PickingDemo.java:29) 位于processing.core.PApplet.handleDraw(PApplet.java:2281) 在processing.opengl.PJOGL$PGLListener.display(PJOGL.java:862) 在jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:652) 在jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:636) 位于javax.media.opengl.awt.GLCanvas$10.run(GLCanvas.java:1284) 在jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1106) 在jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:981) 位于javax.media.opengl.awt.GLCanvas$11.run(GLCanvas.java:1295) 位于javax.media.opengl.Threading.invoke(Threading.java:193) 位于javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:541) 位于javax.media.opengl.awt.GLCanvas.paint(GLCanvas.java:595) 位于sun.awt.repaintrea.paintComponent(repaintrea.java:248) 位于sun.awt.repaintrea.paint(repaintrea.java:224) 位于sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:308) 位于java.awt.Component.dispatchEventImpl(Component.java:4736) 位于java.awt.Component.dispatchEvent(Component.java:4488) 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:674) 在java.awt.EventQueue.access$400(EventQueue.java:81) 在java.awt.EventQueue$2.run(EventQueue.java:633) 位于java.awt.EventQueue$2.run(EventQueue.java:631) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 位于java.awt.EventQueue$3.run(EventQueue.java:647) 在java.awt.EventQueue$3.run(EventQueue.java:645) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:644) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:184) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:174) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 在java.awt.EventDispatchThread.run处(EventDispatchThread.java:122) 代码如下:

import picking.*;
import processing.core.*;

public class PickingDemo extends PApplet{

// Declare a Picker object to do the picking.
Picker picker;

// Set up variables for the scene.
float r = (float) 0.0;
int[] colors = {
        color(064,064,064), // Black
        color(255,000,000), // Red
        color(000,255,000), // Green
        color(000,000,255), // Blue
        color(255,255,000), // Yellow
        color(255,000,255), // Purple
        color(000,255,255), // Cyan
        color(255,255,255) }; // White
int bgcolor = color(32);

public void setup(){
    // Set the size, and make this a 3D sketch.
    size(300,300, P3D);
    // Set up the picking object.
    picker = new Picker(this);
}

public void draw(){
    // Define a variable to track the current object's ID.
    int currentID = 0;
    // The background's ID is always -1
    background(bgcolor);
    lights();
    noStroke();
    translate((float) (width/2.0), (float) (height/2.0), (float) (30));
    rotateY(r);
    r= (float) ((r+0.01)%TWO_PI);
    for(int x=-1;x<2;x++){
        for(int y=-1;y<2;y++){
            for(int z=-1;z<2;z++){
                // Each box has a different object ID, so you have to tell the picker which ID to use. 
                picker.start(currentID);
                pushMatrix();
                scale(40);
                translate(x,y,z);
                if(x*y*z != 0){
                    // Each box is has a different color.
                    fill(colors[currentID]);
                    // Draw the box.
                    box(1);
                    currentID++;
                }
                popMatrix();
                // Tell the picker to stop using the ID, since we don't want any other objects to use this ID.
                picker.stop();
            }
        }
    }

    // See the click buffer. Warning: Heavy code.
    //loadPixels();
    //picker.getBuffer().loadPixels();
    //for( int i = 0; i < width * height; i++){
    //  pixels[i] = 200 * picker.getBuffer().pixels[i];
    //}
    //updatePixels();

}

public void mouseClicked(){
    // Get the object ID at the mouse's position.
    int mouseID = picker.get(mouseX,mouseY);
    println( mouseID );
    if(mouseID!=-1){
        // Set the background to the same color (but darker) to indicate which box was clicked.
        bgcolor = color( red(colors[mouseID])/2, green(colors[mouseID])/2, blue(colors[mouseID])/2 );
    } 
}
导入领料。*;
进口加工。核心。*;
公共类PickingDemo扩展了PApplet{
//声明一个选择器对象来执行拾取。
选择器选择器;
//为场景设置变量。
浮动r=(浮动)0.0;
int[]颜色={
颜色(064064064),//黑色
颜色(255000000),//红色
颜色(000255000),//绿色
颜色(000000255),//蓝色
颜色(255255000),//黄色
颜色(255000255),//紫色
颜色(000255255),//青色
颜色(255255)};//白色
int bgcolor=color(32);
公共作废设置(){
//设置尺寸,并使其成为三维草图。
尺寸(300300,P3D);
//设置拾取对象。
选择器=新选择器(本);
}
公众抽签(){
//定义一个变量来跟踪当前对象的ID。
int currentID=0;
//背景的ID始终为-1
背景色;
灯光();
仰泳();
平移((浮动)(宽度/2.0),(浮动)(高度/2.0),(浮动)(30));
rotateY(r);
r=(浮动)((r+0.01)%2μPI);

对于(intx=-1;x如果问题是eclipse没有看到拾取库,那么您需要将拾取库jar添加到eclipse项目中,并将其添加到构建路径中

试试这个:

  • 创建一个名为libs的文件夹(如果项目中还没有)
  • 将picking library.jar文件复制到该文件夹中
  • 右键单击picking library.jar文件并选择构建路径>添加到构建路径