Processingの初期化が3で変わっていた

2016-06-29

Processing3になって初期化が変わっていたことに気がついた。settings()というメソッドができて、size()はその中で行うことになったらしい。

PDE上で動かす分にはビルドで自動的に変換してくれるので今までどおりsetup()の中に書いてもいいんだけど、外部から動かす場合にはエラーになってしまう。

Javaから直接PAppletを使う場合には、例えばHello.java:

import processing.core.*;

public class Hello extends PApplet {
public void setup() {
size(300, 240);
noStroke();
fill(255, 0, 0);
rect(50, 50, 200, 140);
}
}

などと書いて、コンパイル:

$ javac -cp /Applications/Processing.app/Contents/Java/core.jar Hello.java

して、実行:

$ java -cp .:/Applications/Processing.app/Contents/Java/core.jar Hello Hello

するとエラーが出る:

When not using the PDE, size() can only be used inside settings().
Remove the size() method from setup(), and add the following:
public void settings() {
size(300, 240);
}
Exception in thread "Animation Thread" java.lang.IllegalStateException: size() cannot be used here, see https://processing.org/reference/size_.html
at processing.core.PApplet.insideSettings(PApplet.java:933)
at processing.core.PApplet.size(PApplet.java:1969)
at Hello.setup(Hello.java:5)
at processing.core.PApplet.handleDraw(PApplet.java:2378)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1527)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)

エラーメッセージ通りにsizeの呼び出しをsettingsメソッド内に移動すれば動くようになる。