线程异常 "Animation Thread" processing.core.PApplet$RendererChangeException

Exception in thread "Animation Thread" processing.core.PApplet$RendererChangeException

我尝试在 Mac 上的 Eclipse 中 运行 Java class:

import processing.core.*;
import de.fhpotsdam.unfolding.*;
import de.fhpotsdam.unfolding.providers.Google;

public class LifeExpectancy extends PApplet {
    UnfoldingMap map;

    public void setup() {}

    public void draw() {
        size(800, 600, OPENGL);
        map = new UnfoldingMap(this, 50, 50, 700, 500, new Google.GoogleMapProvider());
    }
}

但我收到错误消息:

Exception in thread "Animation Thread" processing.core.PApplet$RendererChangeException
    at processing.core.PApplet.size(PApplet.java:1789)
    at processing.core.PApplet.size(PApplet.java:1746)
    at module2.LifeExpectancy.draw(LifeExpectancy.java:16)
    at processing.core.PApplet.handleDraw(PApplet.java:2390)
    at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:245)
    at processing.core.PApplet.run(PApplet.java:2260)
    at java.lang.Thread.run(Thread.java:745)

我在 Google 发现我需要将所有 OpenGL 库添加到我的构建路径中。例如,这里: https://forum.processing.org/two/discussion/2931/build-in-eclipse-using-opengl-fails

我这样做了,但我仍然遇到同样的错误。这是我的项目构建路径:

请问我还应该做些什么来消除这个错误?

您正在 draw() 函数中执行属于 setup() 函数的操作。具体来说,您应该只调用 size() 一次 ,作为 setup() 函数的第一行。最重要的是,您可能也只需要创建一次地图。

import processing.core.*;
import de.fhpotsdam.unfolding.*;
import de.fhpotsdam.unfolding.providers.Google;

public class LifeExpectancy extends PApplet {
    UnfoldingMap map;

    public void setup() {
        size(800, 600, OPENGL);
        map = new UnfoldingMap(this, 50, 50, 700, 500, new Google.GoogleMapProvider());
    }

    public void draw() {
        //draw your map
    }
}

其实对于Processing3.x,上面的方法是行不通的,因为size()函数应该在settings()中调用,如下:

import processing.core.PApplet;

public class Template extends PApplet {

    public void settings() {

        size(800, 600, ...);
    }

    public void setup() {

    }

    public void draw() {

        background(0, 30, 0);
    }

    public static void main(String[] args) {

        PApplet.main(new String[] { Template.class.getName() });
    }
}