1

I'm working in a project in IntelliJ with the Processing library imported. I have two files, StartUpGUI.java, and Renderer.java.
If I ignore the first file and put this in Renderer.java, the sketch runs perfectly.

public class Renderer extends PApplet {
...
     public static void main(String[] args) {
          PApplet.main(new String[] {Renderer.class.getName()});
     }
...
}

But if I try to put the main() in the StartUpGUI.java file and have it call the constructor of the other, I get an error.
StartUpGUI.java

public class StartUpGUI {
     public static void main(String[] args) {
          Renderer renderer = new Renderer();
     }
}

Renderer.java

public class Renderer extends PApplet {
...
     public Renderer() {
          PApplet.main(new String[] {Renderer.class.getName()});
     }
...
}

Error

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.runSketch(PApplet.java:10277)
    at processing.core.PApplet.main(PApplet.java:10091)
    at field.renderer.Renderer.<init>(Renderer.java:17)
    at jdk.internal.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
    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.runSketch(PApplet.java:10277)
    at processing.core.PApplet.main(PApplet.java:10091)
    at field.renderer.Renderer.<init>(Renderer.java:17)
    ...
(The error is absurdly long)
    ...
    at processing.core.PApplet.main(PApplet.java:10091)
Caused by: java.lang.reflect.InvocationTargetException
    at jdk.internal.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
    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.runSketch(PApplet.java:10277)
    at processing.core.PApplet.main(PApplet.java:10091)
    at field.renderer.Renderer.<init>(Renderer.java:17)
    at jdk.internal.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source)
    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.runSketch(PApplet.java:10277)
    at processing.core.PApplet.main(PApplet.java:10091)
    at field.renderer.Renderer.<init>(Renderer.java:17)
    ...

I don't know if that error is helpful at all, I just hope there's a couple lines in there that can tell someone what's going on. I don't understand it.

One thing I tried was changing the the constructor of Renderer.java to say PApplet.main(new String[] {StartUpGUI.class.getName()}); instead but it just gave the error:

java.lang.ClassCastException: class field.renderer.StartUpGUI cannot be cast to class processing.core.PApplet (field.renderer.StartUpGUI and processing.core.PApplet are in unnamed module of loader 'app')
    at processing.core.PApplet.runSketch(PApplet.java:10277)
    at processing.core.PApplet.main(PApplet.java:10091)
    at field.renderer.Renderer.<init>(Renderer.java:17)
    at field.renderer.StartUpGUI.main(StartUpGUI.java:11)

So, if anyone knows how to start a Processing sketch from outside the main file, I'd really appreciate help. Thanks in advance.

Also, I'm new to asking questions on Stack Overflow, so sorry if I did anything wrong.

  • Looks like you're trying to use primarily Java. Processing uses Java, but mostly it's 'under the hood' and users don't need to interact with it directly, although it is sometimes added to Processing code. To start a sketch in Processing all that is required is about three lines of code: void setup(){ size(400,400);} void draw(){ }. If you want to change the renderer then add P2D or P3D as the third parameter for size(); – apodidae Feb 21 '22 at 06:36
  • @apodidae I'm using processing as an imported library to a project in IntelliJ. Because of that, I need to do more backend stuff. If I was using the normal processing environment that would work. – Stephen Day Feb 21 '22 at 12:39

1 Answers1

1

I figured it out. I guess it just needed to be in a static context.

Renderer.java

public static void main(String[] args) {
    PApplet.main(new String[] {Renderer.class.getName()});
}

StartUpGUI.java

public static void main(String[] args) {
    Renderer.main(args);
}