H1rono_K
@H1rono_K

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ProcessingをJavaから呼び出す方法について

Processingをjavaで実行する方法について質問です。まず、問題のプログラムは次のものです。

App.java
import processing.core.*;

public class App extends PApplet {
    public static void main(String args[]) {
        PApplet.main(new String[] { "--present", App.class.getName() });
    }

    @Override
    public void settings() {
        size(720, 720);
    }

    @Override
    public void setup() {}

    @Override
    public void draw() {
        background(255);
        circle(width / 2, height / 2, 100);
    }
}

Processingのcore.jarを環境変数のCLASSPATHに通して先ほどのプログラムを実行したところ、次のようになりました。

> java App.java
java.lang.RuntimeException: java.lang.ClassNotFoundException: App
        at processing.core.PApplet.runSketch(PApplet.java:10852)
        at processing.core.PApplet.main(PApplet.java:10620)
        at App.main(App.java:5)
Caused by: java.lang.ClassNotFoundException: App
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at processing.core.PApplet.runSketch(PApplet.java:10845)
        at processing.core.PApplet.main(PApplet.java:10620)
        at App.main(App.java:5)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.execute(Main.java:415)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.run(Main.java:192)
        at jdk.compiler/com.sun.tools.javac.launcher.Main.main(Main.java:132)

どなたか解決方法を教えてください。OSはWindows 10 Home(64ビット)、Javaのバージョンは14.0.2、Processingのバージョンは3.5.4です。

参考:

0

1Answer

現在は App.java を直接実行していると思います(JEP 300 の「単一ファイルのソースコードプログラムの起動」を使っている)

この場合には Processing から App クラスが見えないのだと思います(おそらく、JEP 300 の制限)。

App.java をコンパイルして、App.class のおいてあるディレクトリ(あるいはパッケージした jar ファイル)をクラスパスに登録して実行してください。

例えば、Processing が CLASSPATH に登録されている前提で、以下のような感じで実行してください(訂正しました)

$ javac App.java
$ java -cp .:$CLASSPATH App
0Like

Comments

  1. @H1rono_K

    Questioner

    上記のコマンドを実行したところ、今度は`processing.core.PApplet`が見つからなくなったんですが、-cpにCLASSPATHも渡したところ実行できました!ありがとうございました!

Your answer might help someone💌