Java 在JAR文件中使用图像

Java 在JAR文件中使用图像,java,jar,embedded-resource,Java,Jar,Embedded Resource,我似乎不能把这个弄对 我在Eclipse中有一个名为MyProject的Java项目。在其根目录中是文件夹bin、src和resources。在参考资料中,我有一个名为myImage.gif的图像 在我的代码中,我想使用这个图像,我想让它工作,无论它是否从Jar文件运行。我目前正在这样做 ImageIcon j = new ImageIcon(getClass().getResource("/resources/myImage.gif")); 但当我在Eclipse中运行它(而不是作为一个Ja

我似乎不能把这个弄对

我在Eclipse中有一个名为MyProject的Java项目。在其根目录中是文件夹bin、src和resources。在参考资料中,我有一个名为
myImage.gif
的图像

在我的代码中,我想使用这个图像,我想让它工作,无论它是否从Jar文件运行。我目前正在这样做

ImageIcon j = new ImageIcon(getClass().getResource("/resources/myImage.gif"));
但当我在Eclipse中运行它(而不是作为一个Jar)时,它会抛出一个空值


正确的方法是什么?

将资源放入src中,Eclipse将其复制到bin中

ImageIcon ii =
   new ImageIcon(
      ImageIO.read(
         getClass().getClassLoader().getResourceAsStream(
            "resources/myImage.gif" )));

没有/在路径之前。

将资源放入src中,Eclipse将其复制到bin中

ImageIcon ii =
   new ImageIcon(
      ImageIO.read(
         getClass().getClassLoader().getResourceAsStream(
            "resources/myImage.gif" )));

没有/在路径之前。

如果您要告诉Eclipse将
资源
视为源文件夹,那么您应该能够说

ImageIcon j = new ImageIcon(getClass().getResource("/myImage.gif"));
当您构建JAR时,您必须确保
resources
目录的内容进入JAR文件的顶层,以便在JAR案例中使用相同的路径,即

META-INF
  MANIFEST.MF
com
  example
    MyClass.class
myImage.gif
或者,也可能是更常见的Java习惯用法,将图像文件放在与
.Java
文件相同的目录中(本例中为
src/com/example
),然后使用
getResource
,不带前导斜杠

new ImageIcon(getClass().getResource("myImage.gif"));

Class.getResource
根据所讨论的类的包解析这样的相对路径。同样,在构建JAR时,您需要在JAR中具有相同的结构,这一次使用
com/example

下的
myImage.gif
,如果您要告诉Eclipse将
资源
视为源文件夹,那么您应该能够说

ImageIcon j = new ImageIcon(getClass().getResource("/myImage.gif"));
当您构建JAR时,您必须确保
resources
目录的内容进入JAR文件的顶层,以便在JAR案例中使用相同的路径,即

META-INF
  MANIFEST.MF
com
  example
    MyClass.class
myImage.gif
或者,也可能是更常见的Java习惯用法,将图像文件放在与
.Java
文件相同的目录中(本例中为
src/com/example
),然后使用
getResource
,不带前导斜杠

new ImageIcon(getClass().getResource("myImage.gif"));

Class.getResource
根据所讨论的类的包解析这样的相对路径。同样,在构建JAR时,您需要在JAR中具有相同的结构,这次使用
com/example

下的
myImage.gif
“/resources/myImage.gif”是一个绝对路径,请尝试“resources/myImage.gif”不幸的是,同样的问题打印当前路径并通过“resources/myImage.gif”扩展它,检查这是否是指向您的image.InputStream=yourClass.class.getResourceAsStream('/resources/myImage.gif')`是的,它是指向图像的路径。“/resources/myImage.gif”是绝对路径请尝试“resources/myImage.gif”同样的问题不幸地打印当前路径并通过“resources/myImage.gif”扩展它检查这是否是指向图像的路径。InputStream=yourClass.class.getResourceAsStream(“/resources/myImage.gif”)`是的,这是到映像的路径。不,同样的事情…我如何让eclipse刷新整个东西,以便它清理和构建资源,从而将资源放入bin?即使我手动将其放入bin,不幸的是,这仍然不起作用。同样的问题,空指针…不,这不起作用。我是从ECLIPSE运行的,不是从Jar文件运行的。我需要一个适用于JAR和ECLIPSE的解决方案。我现在从ECLIPSE测试它@根据正确路径的CodeGuy取决于文件的确切放置位置。如果将文件放在
src/resources/myImage.gif
等位置,则使用
classLoader.getResourceAsStream(“resources/myImage.gif”)
将有效。如果
myImage.gif
直接位于
src
内,则只需使用
myImage.gif
而不使用
resources//code>Nope,同样的事情…我如何让eclipse刷新整个东西,以便它清理和构建资源,从而将资源放在bin中?即使我手动将其放在bin中,不幸的是,这仍然不起作用。同样的问题,空指针…不,这不起作用。我是从ECLIPSE运行的,不是从Jar文件运行的。我需要一个适用于JAR和ECLIPSE的解决方案。我现在从ECLIPSE测试它@根据正确路径的CodeGuy取决于文件的确切放置位置。如果将文件放在
src/resources/myImage.gif
等位置,则使用
classLoader.getResourceAsStream(“resources/myImage.gif”)
将起作用。如果
myImage.gif
直接位于
src
内,则只需要
不带
资源的“myImage.gif”