我正在将 Java Maze 应用程序移植到 Android 中。这意味着我正在使用给我的 Java 代码(我没有编写这部分),重写了一些类(即,将 Java 图形更改为 Android 图形以便它在 Android 上工作,我创建了 Android UI 活动(我已经完成了)。
当我运行我的程序时,我得到一个 NullPointerException,它抱怨以下行是异常的原因:
maze.newMaze(root, cells, dists, startx, starty);
这是错误:
01-19 19:22:53.157: E/AndroidRuntime(638): FATAL EXCEPTION: Thread-79
01-19 19:22:53.157: E/AndroidRuntime(638): java.lang.NullPointerException
01-19 19:22:53.157: E/AndroidRuntime(638): at falstad.MazeBuilder.run(MazeBuilder.java:729)
01-19 19:22:53.157: E/AndroidRuntime(638): at java.lang.Thread.run(Thread.java:856)
错误线显然在 MazeBuilder 的 run 方法中,我发现“迷宫”为空并且参数有效。我还发现在 Mazebuilder 的构建方法中将 maze 设置为 null ...它通过 Maze 对象并设置 maze = mz (maze)。
所以我在 Maze.java 中找到了 mazebuilder.build(...) 被调用的地方,它位于底部的方法 maze.build() 中,参数为“this”:
/**
* Method obtains a new Mazebuilder and has it compute new maze,
* it is only used in keyDown()
* @param skill level determines the width, height and number of rooms for the new maze
*/
private void build(int skill) {
// switch screen
state = STATE_GENERATING;
redraw();
// select generation method
switch(method){
case 1 : mazebuilder = new MazeBuilderPrim(); // generate with Prim's algorithm
break ;
case 0: // generate with Falstad's original algorithm (0 and default), note the missing break statement
default : mazebuilder = new MazeBuilder();
break ;
}
// adjust settings and launch generation in a separate thread
mazew = skill_x[skill];
mazeh = skill_y[skill];
int roomcount = skill_rooms[skill];
mazebuilder.build(this, mazew, mazeh, roomcount, skill_partct[skill]);
// mazebuilder calls back by calling newMaze() to return newly generated maze
}
读到这个告诉我参数'this'是空的。我已经阅读了java中的“this”函数并且仍然不理解它,所以我不确定它为什么为空。我也猜测问题的一部分是因为我有
mazebuilder = new MazeBuilder()
并不是
mazebuilder = new MazeBuilder(this)
当我尝试添加“this”参数(如上面的代码行)时,它向我抱怨构造函数 MazeBuilder(Maze) 未定义。但是我的 GeneratingActivity GA 与 Maze maze 是不同的类型......所以很明显我不能创建一个设置 GA = maze 的构造函数......我很困惑。
再次,我非常感谢任何帮助和耐心。这对新手来说是一场噩梦。