您好我制作了两个程序:一个是关卡编辑器,另一个是马里奥克隆游戏。
我做了:项目结构 - >工件和我为这两个应用程序创建了一个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运行游戏时我才得到例外,只是想知道为什么?有人知道吗?
答案 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。