到目前为止我只使用过 Processing's 标准渲染器。我有一个java项目,我正在其中通过maven处理包含的内容。 由于其他渲染器可能更快,我想尝试在当前项目中使用另一个渲染器,但任何其他渲染器对我来说都失败(P2D、P3D、FX2D)。仅默认情况下,Java2D 有效。
我觉得很奇怪,所以我开始了另一个项目,里面什么都没有,只是创建一个空框架。我首先尝试在 Processing.exe 中将其作为草图运行,并且它有效:
草图代码:
void setup()
{
size(500, 200, P3D);
}
void draw()
{
}
然后我将其重写为纯java:
import processing.core.PApplet;
public class Test extends PApplet
{
public void setup() {
}
public void draw() {
}
public void settings() {
this.size(500, 200, P3D);
}
public static void main(final String[] passedArgs) {
final String[] appletArgs = { "Test" };
if (passedArgs != null) {
PApplet.main(concat(appletArgs, passedArgs));
}
else {
PApplet.main(appletArgs);
}
}
}
无论我到目前为止尝试了什么,我都会遇到以下例外:
java.lang.NoClassDefFoundError: com/jogamp/opengl/GLException
at processing.opengl.PGraphicsOpenGL.createPGL(PGraphicsOpenGL.java:712)
at processing.opengl.PGraphicsOpenGL.<init>(PGraphicsOpenGL.java:569)
at processing.opengl.PGraphics3D.<init>(PGraphics3D.java:35)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at processing.core.PApplet.makeGraphics(PApplet.java:2235)
at processing.core.PApplet.createPrimaryGraphics(PApplet.java:2314)
at processing.core.PApplet.initSurface(PApplet.java:10828)
at processing.core.PApplet.runSketch(PApplet.java:10767)
at processing.core.PApplet.main(PApplet.java:10467)
at Test.main(Test.java:19)
Caused by: java.lang.ClassNotFoundException: com.jogamp.opengl.GLException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 14 more
java.lang.RuntimeException: com/jogamp/opengl/GLException
at processing.core.PApplet.makeGraphics(PApplet.java:2268)
at processing.core.PApplet.createPrimaryGraphics(PApplet.java:2314)
at processing.core.PApplet.initSurface(PApplet.java:10828)
at processing.core.PApplet.runSketch(PApplet.java:10767)
at processing.core.PApplet.main(PApplet.java:10467)
at Test.main(Test.java:19)
我正在使用 Java 17,并且已经尝试使用 Java 8 运行,因为我读到这可能有效,但是......它没有。 是否无法在processing.exe之外运行这些P2D、P3D、FX2D草图?
解决此问题的更好方法是使用更新的处理4。 Micycle1 通过 JitPack 使processing4-core可以与maven一起使用:https://github.com/micycle1/processing-core-4
向 pom.xml 添加以下依赖项解决了这个问题:
<dependency>
<groupId>org.jogamp.jogl</groupId>
<artifactId>jogl-all</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.jogamp.gluegen</groupId>
<artifactId>gluegen-rt-main</artifactId>
<version>2.3.2</version>
</dependency>
您可以在Processing IDE中导出应用程序,然后只需复制导出的文件即可。
它还为您提供了一个虽然写得不好的 .java 文件。
但是,每种操作系统类型的文件都不同,因此可能很烦人。
使用
P2D
不一定能节省任何 CPU 电量或提高速度。
FX2D
速度更快,但很烦人。