2013-04-04 76 views
0

我的程序在Eclipse中完美运行,但是当我输出它时,图像不显示。图像没有显示在罐子里

我的设置是这样

src 
..gui 
....Main.java 
....menus 
......MenuMain.java 
res 
...Logo.png 

我从MenuMain.java refence Logo.png,我试过很多方法;

  • res/Logo.png
  • /res/Logo.png
  • .res/Logo.png
  • ../../Logo.png
  • ++++

前3者在Eclipse中工作,但在罐既不作品。我检查了jar文件,res文件夹在那里,所有的图像也是如此。我也尝试编辑MANIFEST.MF并添加类路径:

但它仍然无法正常工作。我没有得到任何错误,当运行JAR,其他一切都显示文件(按钮,标签,++)

编辑: 我用这是JPanel与GridBagLayout,我添加一个ImageIcon JLabel能够将它添加到JPanel。本来我以前是这样的:

JLabel logo = new JLabel(new ImageIcon("res/Logo.png")); 

但我也试过像其他变化:

JLabel logo = new JLabel(new ImageIcon(MenuMain.class.getClassLoader().getResource("/res/Logo.png"))); 

而且还通过getResourceAsStream()

在Eclipse中只有第一个作品,但不显示在罐子里。其他人只是崩溃(空指针)

+0

是这样摇摆?你能发布与阅读/渲染图像相关的代码片段吗? – asgs 2013-04-04 17:59:56

+0

从jar中运行时,通常需要将src文件夹的编译内容和res文件夹的所有内容放在一起。然后你只需从类路径加载。 – 2013-04-04 18:00:04

+0

@asgs在主要帖子中增加了更多信息 – Limon 2013-04-04 18:22:50

回答

0

您需要包括Logo.png在你的罐子,并使用ClassLoader.getResourceAsStream()

一般模式的类路径中加载资源:

... 
InputStream resource = className.class.getResourceAsStream("/res/Logo.png"); 
Image image = ImageIO.read(resource); 
// do your display stuff here... 
... 
+0

我在我的罐子里有Logo.png。我也试过至少10个变种的代码,但后来我不能在eclipse中运行(没有尝试导出它,所以我不知道它是否有效)。 – Limon 2013-04-04 18:07:10

+0

好的,然后使用'getResourceAsStream()'而不是'FileInputStream'。 – PaulProgrammer 2013-04-04 18:07:59

+0

InputStream resource = MenuMain.class.getResourceAsStream(“/ res/Logo.png”); \t \t JLabel logo = new JLabel(); \t \t尝试{ \t \t \t logo = new JLabel(new ImageIcon(ImageIO.read(resource))); \t \t} catch(IOException e){e。的printStackTrace(); } 在线程“main”中给出异常java.lang.IllegalArgumentException:input == null! – Limon 2013-04-04 18:11:14