线程异常 "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() });
}
}
我尝试在 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() });
}
}