处理: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 项目来移植所有内容。
我正在将工作处理代码迁移到 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 项目来移植所有内容。