Java 单独运行Jar文件

Java 单独运行Jar文件,java,swing,Java,Swing,海 我有一个在netbeans6.0.1中设计的应用程序,我需要将图像显示为徽标 mLogo = new JLabel(); URL lUrlLogo = getclass().getResource("/com/images/image.gif"); Image lLogoimage = Toolkit.getDefaultToolkit().getImage(lUrlLogo); ImageIcon licon = new ImageIcon(lLogoimage); mLogo.setIc

海 我有一个在netbeans6.0.1中设计的应用程序,我需要将图像显示为徽标

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)
我的罐子有什么问题 有人能帮我打开罐子吗
感谢您

您的jar文件将需要包含图像

有关如何执行此操作的说明,请参阅或。基本上,如果您将该文件包含在源文件夹中(具有适当的路径),则应该可以

如果你认为你已经有了这个形象,那就快跑吧

jar tvf file.jar
显示内容。确保所有内容都在您期望的目录中


编辑:根据评论,问题原来是因为区分大小写


在jar文件中查找资源总是区分大小写的,而从文件系统加载资源只有在文件系统不区分大小写时才区分大小写。因此,如果您的文件是
image.GIF
,但您正在查找
image.GIF
,那么当您从Windows中的文件系统加载时,它将工作,但不在jar文件中。

您的jar文件将需要包含该图像

有关如何执行此操作的说明,请参阅或。基本上,如果您将该文件包含在源文件夹中(具有适当的路径),则应该可以

如果你认为你已经有了这个形象,那就快跑吧

jar tvf file.jar
显示内容。确保所有内容都在您期望的目录中


编辑:根据评论,问题原来是因为区分大小写


在jar文件中查找资源总是区分大小写的,而从文件系统加载资源只有在文件系统不区分大小写时才区分大小写。因此,如果您的文件是
image.GIF
,但您正在查找
image.GIF
,那么当您在Windows中从文件系统加载时,它将工作,但不在jar文件中。

并且您已检查jar文件是否包含路径
“/com/images/image.GIF”

另外,我不太确定前导斜杠是什么,我总是使用相对路径来访问资源(但我想它无论如何都应该有效)

作为class
it.lapo.example.Main的一个示例,我使用
getClass().getResource(“resources/logo.png”)
在JAR文件中是这样的:

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

我知道。。。与您自己的示例没有太大不同,但它确实有效。。。所以我猜你的也差不多是正确的。

并且你已经检查了JAR文件是否包含路径
“/com/images/image.gif”

另外,我不太确定前导斜杠是什么,我总是使用相对路径来访问资源(但我想它无论如何都应该有效)

作为class
it.lapo.example.Main的一个示例,我使用
getClass().getResource(“resources/logo.png”)
在JAR文件中是这样的:

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

我知道。。。与您自己的示例没有太大不同,但它确实有效。。。所以我猜你的也差不多是正确的。

是的,我把图像放在我的罐子里,放在我需要它的地方。如果你调用getResourceAsStream()而不是getResource(),会发生什么?如果返回null,则听起来文件不在那里或不在正确的位置。你们的外壳是否正确?即使您的普通文件系统不区分大小写,jar文件中的资源查找也不会区分大小写。谢谢,我得到了它,它的扩展名区分大小写,我已经更改了它及其工作方式是的,我的jar中有图像,在我需要它的位置如果您调用getResourceAsStream()而不是getResource(),会发生什么?如果返回null,则听起来文件不在那里或不在正确的位置。你们的外壳是否正确?即使您的普通文件系统不区分大小写,jar文件中的资源查找将不可用。谢谢,我得到了它,它区分大小写,扩展名为。我已更改了它及其工作方式。我使用了RelativePath,我在指定路径中找到了我的图像,但它仍然不工作。我使用了RelativePath,我在指定路径中找到了我的图像,但它仍然不工作