Reputation: 21
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.
Upvotes: 1
Views: 132
Reputation: 21
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);
}
Upvotes: 1