[英]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");
}
}
但我收到以下异常,因为我没有在setup
或draw
调用 Processing 方法
线程“main”中的异常 java.lang.NullPointerException
在 processing.core.PApplet.textWidth(PApplet.java:12960)
在 ProcessingRELP.invokeProcessingMethod(ProcessingRELP.java:27)
在 Test.main(Test.java:25)
无论如何,是否可以在草图之外调用处理方法,或者仍然以一种创造性的方式在草图中执行此操作,但能够从草图外部检索数据?
您需要先运行草图,因为您正在尝试调用依赖于草图运行时的方法( textWidth()在其计算中使用实时草图的textFont和textSize )而不是静态方法。 简单地实例化一个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.