Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.NullPointerException(15个谜题)_Java_Algorithm_Artificial Intelligence_Puzzle - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.NullPointerException(15个谜题)

“线程中的异常”;“主要”;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)

首先,这个问题是关于15个谜题。我正在努力学习如何用Java语言编写代码

我必须在我的学院学习关于IDA*算法的人工智能,并找到了Brian Borowski的链接:这是一个非常好的链接,但当我试图在Eclipse上手动构建它时,出现了一个错误

有人能帮我吗?我得到一个错误,上面写着:

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)。