2009-09-03 87 views
0

海 我有设计在netbeans6.0.1的应用程序,我需要显示图像作为logo.My编码是如下运行一个JAR文件单独

mLogo = new JLabel(); 
URL lUrlLogo = getclass().getResource("/com/images/image.gif"); 
Image lLogoimage = Toolkit.getDefaultToolkit().getImage(lUrlLogo); 
ImageIcon licon = new ImageIcon(lLogoimage); 
mLogo.setIcon(licon); 

我的代码工作正常,当我执行它在NetBeans但是当我尝试运行这是由NetBeans的在DIST文件夹中创建我的jar文件,它给了我一个异常

Uncaught error fetching image: 
java.lang.NullPointerException 
     at sun.awt.image.URLImageSource.getConnection(Unknown Source) 
     at sun.awt.image.URLImageSource.getDecoder(Unknown Source) 
     at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) 
     at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) 
     at sun.awt.image.ImageFetcher.run(Unknown Source) 

请告诉我用我的罐子 的问题可以有人帮我跑我的罐子 感谢你

回答

3

你的jar文件将需要包含图像。

请参阅this tutorialthis one了解如何操作的说明。基本上,如果您将文件包含在源文件夹中(使用适当的路径),它应该没问题。

如果你认为你已经得到的图像存在,运行

jar tvf file.jar 

显示的内容。确保一切都在你期望的目录中。


编辑:根据意见,问题原来是由于区分大小写。

查找jar文件中的资源是总是区分大小写,而从文件系统加载它们只在文件系统是大小写敏感的情况下才是大小写敏感的。因此,如果您的文件是image.GIF但您正在寻找image.gif,那么当您从Windows中的文件系统加载时,它将起作用,但不在jar文件中加载。

+0

是的,我有我的罐子里面和我需要它的位置的图像 – chaithu 2009-09-03 06:50:37

+0

但仍然不工作 – chaithu 2009-09-03 06:51:29

+0

如果你调用getResourceAsStream()而不是getResource(),会发生什么?如果它返回null,那么它听起来像文件*不在*那里或在正确的地方。你在套管方面是否正确?即使您的普通文件系统不区分大小写,jar文件中的资源查找也不会。 – 2009-09-03 06:58:57

0

而且您已检查JAR文件是否包含路径"/com/images/image.gif"?另外,我并不确定主导斜线,我总是使用相对路径来访问资源(但我猜它应该工作)。

由于从it.lapo.example.Main类我使用getClass().getResource("resources/logo.png")一个例子,在JAR文件是这样说的:

it/lapo/example/Main.class 
it/lapo/example/resources/logo.png 

我知道......没有太多从你自己的例子不同,但是它的工作...所以我想你的观点也很接近正确。

+0

我已经使用了相对路径,并在指定的路径中找到了我的图片,但仍然无法工作 – chaithu 2009-09-03 06:54:08