我想拥有一个方法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)
at ProcessingRELP.invokeProcessingMethod(ProcessingRELP.java:27)
在Test.main(Test.java:25)
总有没有办法在草图之外调用处理方法,还是有创意的方法仍然可以在草图中进行处理,但是能够从草图外部检索数据?
答案 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()
函数中。但是无论哪种方式,您的“处理”草图都必须是入口点。