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

时间:2019-02-27 06:01:04

标签: java processing

我想拥有一个方法invokeProcessingMethod(String name, Object... args),该方法可以从Processing中调用一个方法并返回可能产生的任何值。

我已经有一个方法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方法

  

线程“ main”中的异常java.lang.NullPointerException
      在processing.core.PApplet.textWidth(PApplet.java:12960)
      at ProcessingRELP.invokeProcessingMethod(ProcessingRELP.java:27)
      在Test.main(Test.java:25)

总有没有办法在草图之外调用处理方法,还是有创意的方法仍然可以在草图中进行处理,但是能够从草图外部检索数据?

2 个答案:

答案 0 :(得分:1)

您需要先运行草图,因为您正在尝试调用依赖于草图运行时的方法( textWidth()使用 textFont textSize 而不是静态方法。简单实例化ProcessingRELP对象不会运行它;这可以通过以下操作完成:

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

现在,由于草图正在运行,因此您可以调用您的方法。

答案 1 :(得分:0)

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

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

无耻的自我促进:here是有关将处理用作Java库的教程。

最重要的是,我会非常怀疑您的invokeMethod()方法。为什么不能直接调用该函数?

类似这样的东西:

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

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

您可以执行一些操作,例如将逻辑移到素描类的setup()函数中。但是无论哪种方式,您的“处理”草图都必须是入口点。