不但要给你鱼还要给你渔
先给你鱼
把image文件加放到运行文件的当前目录上一级试试吧,OK我这里已经看到效果了,哈哈.

解决方案 »

  1.   

    现在给你渔 
    运行程序时出现的异常,对改程序很有帮助
    请看这些信息,钥匙就在里面
    javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1279)
    at com.brackeen.javagamebook.graphics3D.texture.Texture.createTexture(Texture.java:66)
    at GameObjectTest.createPolygons(GameObjectTest.java:46)
    at com.brackeen.javagamebook.test.GameCore3D.init(GameCore3D.java:93)
    at GameObjectTest.init(GameObjectTest.java:37)
    at com.brackeen.javagamebook.test.GameCore.run(GameCore.java:66)
    at GameObjectTest.main(GameObjectTest.java:17)
    Exception in thread "main" java.lang.NullPointerException
    at GameObjectTest.createPolygons(GameObjectTest.java:48)
    at com.brackeen.javagamebook.test.GameCore3D.init(GameCore3D.java:93)
    at GameObjectTest.init(GameObjectTest.java:37)
    at com.brackeen.javagamebook.test.GameCore.run(GameCore.java:66)
    at GameObjectTest.main(GameObjectTest.java:17)
    -------------------------------------------------------------------
    javax.imageio.IIOException: Can't read input file!很明显这是说找不到要读取的文件
    既然是找不到文件我们就找文件吧,
    关键是我们现在不知道文件应该放在什么地方.再看下一行 at javax.imageio.ImageIO.read(ImageIO.java:1279)
    说明在读取图像时遇到了问题,ImageIO.java:1279指明了代码里出问题的位置在文件ImageIO.java
    1279行
    先别急着看这个代码,这个是javax.imageio.ImageIO里面的,也就是JDK里面报的异常,一般来说问题处在调用它的地方
    接着找下面的 at com.brackeen.javagamebook.graphics3D.texture.Texture.createTexture(Texture.java:66)
    打开 Texture 66行附近是这样 的
       try {
                return createTexture(ImageIO.read(new File(filename)),
                    shaded);
            }
       catch (IOException ex) {
                ex.printStackTrace();
                return null;
            }
    哈哈,看到filename了
      

  2.   

    但这个filename是别的地方传过来的
    现在有两种方法可以找到它,一种是沿着filename一直找到它的来源
    另一种是沿着异常堆栈一直找.
    我用的工具是eclipse 在控制台中双击异常便能打开异常发生的地方,显示这部分代码.所以我沿着异常找. at GameObjectTest.createPolygons(GameObjectTest.java:48)在这个地方 你可以看到
            Texture floorTexture = Texture.createTexture(
                "../images/roof1.png", true);
    也就是说 images文件价应该放在上一级目录.