“线程中的异常”;“主要”;java.lang.NullPointerException(15个谜题)
首先,这个问题是关于15个谜题。我正在努力学习如何用Java语言编写代码 我必须在我的学院学习关于IDA*算法的人工智能,并找到了Brian Borowski的链接:这是一个非常好的链接,但当我试图在Eclipse上手动构建它时,出现了一个错误 有人能帮我吗?我得到一个错误,上面写着:“线程中的异常”;“主要”;java.lang.NullPointerException(15个谜题),java,algorithm,artificial-intelligence,puzzle,Java,Algorithm,Artificial Intelligence,Puzzle,首先,这个问题是关于15个谜题。我正在努力学习如何用Java语言编写代码 我必须在我的学院学习关于IDA*算法的人工智能,并找到了Brian Borowski的链接:这是一个非常好的链接,但当我试图在Eclipse上手动构建它时,出现了一个错误 有人能帮我吗?我得到一个错误,上面写着: Exception in thread "main" java.lang.NullPointerException at Puzzle.setNumOfTiles(Puzzle.java:45)
Exception in thread "main" java.lang.NullPointerException
at Puzzle.setNumOfTiles(Puzzle.java:45)
at Puzzle.<init>(Puzzle.java:25)
at GUI.<init>(GUI.java:196)
at Application.<init>(Application.java:19)
at Application.main(Application.java:27)
Puzzle.java
public class Application {
/**
* Default constructor.
* Creates an instance of the gui.
*/
public Application() {
ApplicationStarter appStarter = null;
new GUI(appStarter); // Line 19
}
/**
* Main method.
* Creates an instance of the application.
*/
public static void main(final String[] args) {
new Application(); // Line 27
}
}
public Puzzle(final int numOfTiles) {
super();
setNumOfTiles(numOfTiles); // Line 25
setSize(panelWidth, panelHeight);
setDoubleBuffered(true);
}
public void setNumOfTiles(final int numOfTiles) {
this.numOfTiles = numOfTiles;
dimension = (int)Math.sqrt(numOfTiles);
imageArray = new Image[numOfTiles];
final String file = "images/" + (numOfTiles - 1) + "-puzzle/shrksign_";
imageArray[0] = null;
for (int i = 1; i < numOfTiles; ++i) {
final StringBuilder builder = new StringBuilder(file);
if (i <= 9) {
builder.append("0");
}
builder.append(Integer.toString(i));
builder.append(".gif");
imageArray[i] = ImagePanel.getImage(builder.toString());
}
imageWidth = imageArray[1].getWidth(null); // Line 45
imageHeight = imageArray[1].getHeight(null);
panelWidth = imageWidth * dimension;
panelHeight = imageHeight * dimension;
state = new byte[numOfTiles];
sleepMs = 500 / imageWidth;
animationDone = true;
resetOrder();
}
...
this.puzzle = new Puzzle(PuzzleConfiguration.getNumOfTiles());
...
关于例外情况的含义,您完全正确: 它说当某个变量有空值时,就会发生NullPointerException 您需要做的是查看
setNumOfTiles
方法,特别是第45行(整个源文件的第45行,而不是该方法的第45行),看看那里发生了什么
很可能您正在使用未初始化的变量或将其作为参数传递
祝你好运。显然,
imageArray[1]
持有空值。可能是元素1的ImagePanel.getImage()返回null
,或者numofiles>=1,因此循环不会运行
您的循环从i开始并以预增量递增,这意味着没有i=1的循环运行(第一次迭代以i=2运行)。我会用这个表格
for (int i = 1; i <= numOfTiles; i++) {
for(int i=1;i您已经用空值初始化了数组
imageArray = new Image[numOfTiles];
然后通过for循环设置其值
imageArray[i] = ImagePanel.getImage(builder.toString());
但是设置的值是null,当您尝试从null值调用该方法时,在这一行会得到NULLPOINTEREXCEPTION
imageWidth = imageArray[1].getWidth(null);
imageArray[1]包含空值。调用。在空时始终caz NULLPOINTEREXCEPTION这是Puzzle.java中的第45行?什么是空的,不应该在这一行?当您使用调试器运行代码时会发生什么?您调试了第45行发生的事情吗?那里有什么是空的,为什么?可能ImagePanel.getImage(…)
在这种情况下找不到图像并返回null?…MybleConfiguration.getNumOfTiles()的值是多少
?你是否检查过,你的GIF是否存在,并且它们的名称是否正确?@Thomas Study me,在阅读了你的评论后,我忘记将图像复制到我的工作区,现在它可以工作了。感谢很多人!事实上,这不是真的。有一个迭代使用I=1
。预增量操作不会改变这里的逻辑,因为增量操作是在迭代后调用(因此在第一次迭代中,i
仍将具有值1)。