繁体   English   中英

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

[英]How can I invoke a Processing method from outside a Processing sketch?

我想要一个方法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)
在 ProcessingRELP.invokeProcessingMethod(ProcessingRELP.java:27)
在 Test.main(Test.java:25)

无论如何,是否可以在草图之外调用处理方法,或者仍然以一种创造性的方式在草图中执行此操作,但能够从草图外部检索数据?

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

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

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

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

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

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

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

像这样的东西:

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

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

你可以做一些事情,比如将你的逻辑移动到你的草图类的setup()函数中。 但无论哪种方式,您的处理草图都需要成为切入点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM