无法使用Intellij Idea创建可运行的jar

时间:2016-01-06 23:43:17

标签: java intellij-idea jar

您好我制作了两个程序:一个是关卡编辑器,另一个是马里奥克隆游戏。

我做了:项目结构 - >工件和我为这两个应用程序创建了一个jar。

现在,如果我运行关卡编辑器的jar工作没有任何问题。 如果我运行游戏的jar,它就不会启动,我会得到:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1348)
    at com.platform.game.window.BufferedImageLoader.loadImage(BufferedImageLoader.java:15)
    at com.platform.selectlevel.LevelsFinder.<init>(LevelsFinder.java:60)
    at com.platform.game.window.Menu.<init>(Menu.java:72)
    at com.platform.game.window.Window.addMenu(Window.java:55)
    at com.platform.game.window.Window.<init>(Window.java:31)
    at com.platform.game.window.Game.main(Game.java:272)

如果我在编辑器中编译它运作良好,我该如何解决?任何提示?

BufferedImageLoader:

public class BufferedImageLoader {

    private BufferedImage image = null;

    public BufferedImage loadImage(String path){

        try {
            image = ImageIO.read(getClass().getResourceAsStream(path));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
        return image;
    }
}

只有当我从jar而不是IDE运行游戏时我才得到例外,只是想知道为什么?有人知道吗?

1 个答案:

答案 0 :(得分:-1)

据我所知,问题不在jar导出中,而是在你的代码中:

在方法BufferedImageLoader.loadImage(String path)中(在第15行的BufferedImageLoader.java文件中),您调用ImageIO.read(InputStream input)。并且传递Class.getResourceAsStream(path)返回的空对象,并作为docs for ImageIO.read(InputStream input)状态:

  

抛出:IllegalArgumentException - 如果输入为null。

这会导致IllegalArgumentException。我建议使用此代码:

public class BufferedImageLoader {

    private BufferedImage image = null;

    public BufferedImage loadImage(String path) {

        try {
            return image = ImageIO.read(BufferedImageLoader.class.getResourceAsStream(path));
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

有关详细信息,请参阅this post