处理:createShape returns null 当从 eclipse 内部调用设置时

Processing: createShape returns null when called inside setup from eclipse

我正在将工作处理代码迁移到 Eclipse 项目中,因为我想使用一些 android 特性,这些特性在 PDE 中不容易获得。现在我不断收到这个讨厌的错误:

02-20 21:51:01.852: E/AndroidRuntime(19768): FATAL EXCEPTION: Animation Thread
02-20 21:51:01.852: E/AndroidRuntime(19768): Process: com.pbtgames.defuser, PID: 19768
02-20 21:51:01.852: E/AndroidRuntime(19768): java.lang.NullPointerException: Attempt to invoke virtual method 'void processing.core.PShape.setFill(int)' on a null object reference
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main$Cell.recomputeShape(Main.java:467)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main$Cell.changeComplexity(Main.java:460)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main$Cell.<init>(Main.java:446)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main$Board.initGrid(Main.java:690)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main$Board.<init>(Main.java:648)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at com.pbtgames.defuser.Main.setup(Main.java:85)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at processing.core.PApplet.handleDraw(Unknown Source)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at processing.core.PGraphicsAndroid2D.requestDraw(Unknown Source)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at processing.core.PApplet.run(Unknown Source)
02-20 21:51:01.852: E/AndroidRuntime(19768):    at java.lang.Thread.run(Thread.java:818)

堆栈跟踪很简单,在设置内部,我正在初始化一个 Board class:

board = new Board(boardWidth);

这又会初始化一个单元格列表。对于每个单元格,我都有一个名为 "form" 的 PShape 属性,默认情况下未初始化:

PShape form;

在 Cell 的构造函数中,我这样初始化它:

form = createShape();
form.setFill(c);
form.beginShape();
form.noStroke();
PVector[] pts = polygon(0, 0, r, complexity, 0);
for (int i = 0; i < pts.length; i++)
    form.vertex(pts[i].x, pts[i].y);
form.endShape(CLOSE);

但是我的代码在到达时崩溃了:

form.setFill(c);

从 PDE 启动时,这段代码完美运行。有什么想法吗?

提前致谢

更新:

我意识到真正的问题是我使用 size 方法来定义 P2D 渲染器,而这在 android 模式下不可用。相反,我不得不添加这段代码:

public String sketchRenderer() {
    return P2D; 
}

这解决了 createShape 方法的问题。但我仍然面临一些关于我在代码中使用其他库的其他错误。我可以一一解决它们,但我相信 PDE 在生成 android 项目时会进行所有必要的更改。所以我将坚持修改自动生成的 android 项目的解决方案。

我遇到了这个问题 PShape 2.08 throws NullPointerException with createShape 并按照建议使用了 PGraphics 而不是 PShape。现在它可以工作,但我会看看是否可以将我的所有形状移植到 PGraphics 对象,然后再接受它作为解决方案。

更新:

我将形状移植到 PGraphics,但渲染性能明显下降!我想知道 PDE 在生成我的 apk 之前做了什么。这个方案对我来说基本没用

解决方案:

我在 C:\Users\Mohsen\AppData\Local\Temp\android8159256509115545375sketch 中找到了 PDE 生成的临时项目 (确切位置在 PDE 编译 android 代码时打印在控制台中) 现在我可以将这个项目导入到 Eclipse 中并在那里进行修改,而不是通过从头开始构建一个 android 项目来移植所有内容。