1

I am doing the tests for a program I have to do with Java + Processing. I imported the core to the dependencies and I was trying to get the best quality possible with the FX2D rendering, but the moment I use it it just crashes (Tried without specifying the rendering option and worked normally) with this exception:

java.lang.NoClassDefFoundError: com/sun/javafx/geom/Shape
    at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3405)
    at java.base/java.lang.Class.getConstructor0(Class.java:3610)
    at java.base/java.lang.Class.getConstructor(Class.java:2303)
    at processing.core.PApplet.makeGraphics(PApplet.java:2234)
    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 game.GameSketch.run(GameSketch.java:29)
    at game.App.main(App.java:7)
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.geom.Shape
    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:521)
    ... 10 more
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:982)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:929)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:457)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:301)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:211)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:165)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:157)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:121)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:127)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
    at java.lang.reflect.Method.invoke (Method.java:577)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time:  2.234 s
Finished at: 2022-08-28T13:10:00-05:00
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project ProcessingTest: Command execution failed.: Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

The code I am compiling:

package game;

import processing.core.PApplet;

public class GameSketch extends PApplet {

    @Override
    public void settings() {
        fullScreen(FX2D);
    }

    @Override
    public void setup() {
        background(255);
        frameRate(60);
        smooth(4);
    }

    @Override
    public void draw() {
        background(255);
        fill(0);
        textSize(104);
        text("Hello World!", width / 2, height / 2);
    }

    public void run() {
        String[] processingArgs = {this.getClass().getName()};
        PApplet.runSketch(processingArgs, this);
    }
}

I tried importing every library I found of processing in case I was not importing the right one, also changing the "import processing.core.PApplet;" to "import processing.core.*;" but it continues giving the same exception.

How could I use this processing render option in java?

Danermar
  • 11
  • 1
  • Which version of Processing are you using and which OS (and OS version) ? – George Profenza Aug 28 '22 at 19:43
  • I am using Processing 3.3.7 and Windows 11 Home Version 21H2 – Danermar Aug 29 '22 at 13:25
  • Interesting: I've done a test using Processing 3.4 on Windows 11 21H2 and from within the Processing IDE it works if I save the GameSketch class (without the package) in GameSketch.java within the sketch, then in setup `PApplet.main(GameSketch.class.getName());` or `PApplet.runSketch(new String[]{GameSketch.class.getName()}, new GameSketch());`. Are you using command line or an IDE outside of the Processing editor ? (perhaps it doesn't have the javafx jars in the class path ?) – George Profenza Sep 01 '22 at 11:16

1 Answers1

1

The following source code will run in Processing 3.5.4 (or 4.0.1 if you unREM the import) on a Mac. Use cmd-Q to exit the fullscreen.

// Add this for Processing 4:
//import processing.javafx.*;

class GameSketch extends PApplet {

  GameSketch() {  
    PApplet.runSketch(new String[]{this.getClass().getName()}, this);
  }
  
  void settings() {
    fullScreen(FX2D);
    smooth(4);
  }

  void setup() {
    background(255);
    frameRate(60);
  }

  void draw() {
    background(255);
    fill(0);
    textSize(104);
    text("Hello World!", width / 2, height / 2);
  }
}

static GameSketch gameSketch;

void setup() {
  gameSketch = new GameSketch();
}

apodidae
  • 1,988
  • 2
  • 5
  • 9