2016-05-03 19 views
-1

好吧,我已经尝试了很多来自不同资源的答案,但是我的代码仍然无法工作。 (我真的不明白它是如何工作的)使用java的jar文件中的缓冲图像

它是这样的,包含我的java文件的文件夹位于桌面/代码 下,并且我有一个名为package.name的包,其中包含所有图像的文件夹我试图加载...

我要使它成为一个JAR文件,但我的程序总是说文件无法读取,任何有用的提示,将不胜感激

所以,“形象”是具有文件夹我需要的所有图片

这是我为图像绘制的代码:

g2.drawImage(getPicture("/package.name/image/"+1+".png"), x, y, 200, 200, null); 

,我有用于缓冲图像的方法:

public BufferedImage getPicture(String filename) { 
     try { 
      File fp = new File(filename); 
      BufferedImage pic = ImageIO.read(getClass().getResourceAsStream(filename));   
      return pic; 
     } 
     catch (Exception e) { 
      JOptionPane.showMessageDialog(null, "Unable to read file!", "File Error", JOptionPane.ERROR_MESSAGE); 
      return null; 
     } 
    } 

每当我试图在终端运行它,我的代码只是输出消息对话框中,我尝试它编译成jar文件,它不工作。

+0

* *什么是异常类和消息? –

+0

@BrianAgnew异常是这个java.lang.IllegalArgumentException:input == null! –

回答

0

您得到NullPointerException对不对? (我的水晶球说,你这样做)

你应该没有点加载图像.只有斜线/这样的:

g2.drawImage(getPicture("/your/package/name/image/"+1+".png"), x, y, 200, 200, null);

编辑:你得到IllegalArgumentException不NPE - 这个答案仍然有效原因是一样的 - nullgetResourcesAsStream()返回。

如果image目录是在上下文的根,那么它是在default包,你应该ommit的/your/package/name并只使用image/1.png例如

+0

点是该文件夹的名称的一部分,我应该删除/package.name? –

+0

对不起,你是什么意思的根源的上下文? –

+0

如果你有像'my.app.main'这样的包,那么你的目录看起来就像'my/app/main'。根环境是应用程序的顶级目录,所以它将是一个包含'my'目录的目录;) – Antoniossss