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 メソッドにあり、「迷路」が null であり、パラメーターが有効であることがわかりました。また、Mazebuilder の build メソッドで maze が null に設定されていることもわかりました...これは、Maze オブジェクトを通過し、maze = mz (迷路) を設定します。
したがって、mazebuilder.build(...) が呼び出される Maze.java で見つけ、メソッド 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' が null であることがわかります。Javaの「this」関数について読んだことがありますが、まだ理解していないため、なぜnullなのかわかりません。また、問題の一部は、私が持っているためだと推測しています
mazebuilder = new MazeBuilder()
ではない
mazebuilder = new MazeBuilder(this)
「this」パラメーターを追加しようとすると (上記のコード行のように)、コンストラクター MazeBuilder(Maze) が未定義であると怒鳴られます。しかし、私の GeneratingActivity GA は Maze maze とは異なるタイプです...明らかに、GA = maze を設定するコンストラクターを作成できません...混乱しています。
繰り返しになりますが、ご協力とご忍耐に感謝いたします。これは初心者にとって悪夢でした。