Java Can';t使用Intellij Idea创建可运行的jar

Java Can';t使用Intellij Idea创建可运行的jar,java,intellij-idea,jar,Java,Intellij Idea,Jar,嗨,我制作了两个程序:一个是关卡编辑器,另一个是马里奥克隆游戏 我做到了:projectstructure->artifacts,我为这两个应用程序都创建了一个jar 现在,如果我运行leveleditor的jar,它就可以正常工作了。 如果我运行游戏的jar,它不会启动,我会得到: Exception in thread "main" java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.

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

我做到了:projectstructure->artifacts,我为这两个应用程序都创建了一个jar

现在,如果我运行leveleditor的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)

我只有在从jar而不是IDE运行游戏时才会出现异常,只是想知道为什么?有人知道吗?

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

在方法
BufferedImageLoader.loadImage(字符串路径)
(在文件BufferedImageLoader.java的第15行)中,调用
ImageIO.read(InputStream输入)
。然后将
Class.getResourceAsStream(path)
返回的空对象传递给它,作为状态:

抛出:IllegalArgumentException-如果输入为空

这会导致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;
        }
    }
}

有关更多信息,请参阅。

加载图像的代码是什么?看起来由于某些原因无法找到/读取图像如果不看到一些代码,就不可能知道出了什么问题,但我会尝试检查图像路径或启动应用程序所需的任何配置/参数。调试类BufferedImageLoader第15行也是一个好主意,以了解哪些输入被作为null发送到ImageIO。
IllegalArgumentException
不是一个选中的异常(它扩展了
RuntimeException
),因此它编译的事实并不意味着它可以工作。您正在将一个
InputStream
传递给
ImageIO.read()
,即
null
,这意味着您可能忘记了初始化它。事实上,如果我在编辑器中运行,一切都正常,如果我创建并运行jar,我就会出现错误,我将把bufferedImageloader代码放在问题中。只有当我为jar运行游戏时,如果我编译并从编辑器运行,我才会得到这些错误,一切正常。
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;
        }
    }
}