如何从处理草图外部调用处理方法?

How can I invoke a Processing method from outside a Processing sketch?

我想要一个方法 invokeProcessingMethod(String name, Object... args) 从 Processing 调用一个方法和 returns 可能产生的任何值。

我已经有一个方法 invokeMethod(String name, Object...args) 从当前实例的超类中调用一个方法,所以我认为它的实现是用我已有的方法创建一个草图

 class ProcessingRELP extends PApplet{

       public static void main(String[] args) {
            PApplet.main("ProcessingRELP");
       }

       void settings(){

       }

       void setup() {

       }

       void draw() {

       }

       invokeProcessingMethod(String name, Object... args) {
             invokeMethod(name, args);
       }
 }

然后做类似

的事情
 class Test {
       public static void main(String[] args) {
            ProcessingRELP sketch = new ProcessingRELP();
            Object data = sketch.invokeProcessingMethod("textWidth", "hello");
       }
 }

但我得到以下异常,因为我没有在 setupdraw

中调用 Processing 方法

Exception in thread "main" java.lang.NullPointerException
at processing.core.PApplet.textWidth(PApplet.java:12960)
at ProcessingRELP.invokeProcessingMethod(ProcessingRELP.java:27)
at Test.main(Test.java:25)

是否有在草图外调用处理方法或仍然在草图中执行此操作但能够从草图外部检索数据的创造性方法?

我不知道有什么方法可以以给您参考的方式初始化处理草图。您需要使用 PApplet.main() 函数:

String[] appletArgs = new String[] { "MySketch" };
PApplet.main("ProcessingRELP");

无耻的自我推销:here 是一个使用 Processing 作为 Java 库的教程。

除此之外,我非常怀疑您的 invokeMethod() 方法。为什么不能直接调用函数?

像这样:

float stringWidth = sketch.textWidth("hello");

无论哪种方式,我认为您都需要重构代码以使用 PApplet.main() 函数,而不是假设您有对草图本身的引用。

您可以做一些事情,比如将您的逻辑移动到草图 class 的 setup() 函数中。但无论哪种方式,您的 Processing sketch 都需要作为入口点。

您需要先 运行 草图,因为您正在尝试调用依赖于草图 运行 时间的方法(textWidth() 在其计算中使用动态草图的 textFonttextSize)而不是静态方法。简单地实例化一个 ProcessingRELP 对象不会 运行 它;这可以通过以下方式完成:

ProcessingRELP sketch = new ProcessingRELP();
PApplet.runSketch(new String[]{"--location=0,0", ""}, sketch);

现在您可以调用您的方法了,因为草图是 运行ning。