如何通过纯Java使用P2D、P3D、FX2D?

问题描述 投票:0回答:3

到目前为止我只使用过 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草图?

java processing noclassdeffounderror renderer
3个回答
2
投票

解决此问题的更好方法是使用更新的处理4。 Micycle1 通过 JitPack 使processing4-core可以与maven一起使用:https://github.com/micycle1/processing-core-4


0
投票

向 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>

0
投票

您可以在Processing IDE中导出应用程序,然后只需复制导出的文件即可。

它还为您提供了一个虽然写得不好的 .java 文件。

但是,每种操作系统类型的文件都不同,因此可能很烦人。

使用

P2D
不一定能节省任何 CPU 电量或提高速度。

FX2D
速度更快,但很烦人。

© www.soinside.com 2019 - 2024. All rights reserved.