gpt4 book ai didi

java - 将游戏移植到 Android 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 05:49:33 25 4
gpt4 key购买 nike

我正在努力将 Java Maze 应用程序移植到 Android 中。这意味着我正在使用提供给我的 Java 代码(我没有编写这部分),重写一些类(即将 Java 图形更改为 Android 图形以便它在 Android 上运行,并且我创建 Android UI Activity (我已经完成了)。

当我运行我的程序时,我得到一个 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 的运行方法中,我发现“迷宫”为空且参数有效。我还发现 maze 在 Mazebuilder 的构建方法中被设置为 null ...它通过 Maze 对象并设置 maze = mz(迷宫)。

所以我在 Maze.java 中找到了调用 mazebuilder.build(...) 的地方,它位于方法 maze.build() AT THE BOTTOM 中,以“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 迷宫的类型......所以很明显我无法创建一个设置 GA = maze 的构造函数......我很困惑。

再次,我非常感谢任何帮助和耐心。这对新手来说是一场噩梦。

最佳答案

您需要为 newMazeBuilder 类创建一个参数化构造函数,以将当前 Activity Context 传递为:

    public class newMazeBuilder{
public Context context;

public newMazeBuilder(Context context){
this.context=context;
}

///now we context instead of this for passing Context to other components

private void build(int skill) {
// your code here....
mazebuilder.build(context, mazew, mazeh, roomcount, skill_partct[skill]);

}

}

在 Activity 中创建 newMazeBuilder 类对象:

newMazeBuilder mazebuilder = new newMazeBuilder(Your_Current_Activity.this);

关于java - 将游戏移植到 Android 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com