【问题标题】:Where do I store images so that an executable jar file can access them?我在哪里存储图像以便可执行 jar 文件可以访问它们?
【发布时间】:2013-02-18 15:46:10
【问题描述】:

我正在使用 Eclipse 制作我创建的游戏的可执行 jar 文件,但是当我创建 jar 并运行它时,游戏中的图像不再显示。我在哪里存储图像以便 jar 文件可以访问它们?

【问题讨论】:

标签: java eclipse image executable-jar


【解决方案1】:

将它们放入罐子中,然后使用Class.getResourceClass.getResourceAsStreamClassLoader.getResourceClassLoader.getResourceAsStream 访问它们。哪个最合适取决于您在做什么,但您可能想要这样的东西:

Image image = new Image(Program.class.getResource("/images/foo.jpg"));

... 其中Program.class 是同一 jar 文件中的 any 类。或者,如果您将图像存储在与类相同的文件夹中(在部署时),您可以使用:

Image image = new Image(GameCharacter.class.getResource("knight.jpg"));

这是一个相对资源名称。 (相对于相关类。)

【讨论】:

  • 如果我这样输入,它会显示“无法实例化类型图像”。我有一个名为 Resources 的类和一个名为 MountainBackground 的图像,所以我写了 Image image = new Image(Resources.class.getResource("MountainBackground.png"));
  • @user2081893:这只是一个随机的例子——因此是“类似的东西”。我们不知道您正在编写什么样的应用程序,或者您正在使用什么图像类。您应该相应地对其进行调整 - 或在问题中提供更多信息。
【解决方案2】:

为什么不能将它们嵌入到 jar 文件中?

更新:我在其中一项作业中的表现如下: 将图像嵌入到 jar 文件中,并且:

URL url = getClass().getResource("/banana.jpg");
if (url == null)
{
    // Invalid image path above
}
else
{
    // path is OK
    Image image = Toolkit.getDefaultToolkit().getImage(url);
}

【讨论】:

    【解决方案3】:
    import java.net.URL; 
    
    URL imageURL = getClass().getResource("/Icon.jpg");
    Image img = tk.getImage(imageURL);
    this.frame.setIconImage(img);
    

    【讨论】:

      【解决方案4】:

      我的文件结构是:

      ./ - the root of your program
      |__ *.jar
      |__ path-next-to-jar/img.jpg
      

      代码:

      String imgFile = "/path-next-to-jar/img.jpg";
      InputStream stream = ThisClassName.class.getClass().getResourceAsStream(imgFile);
      BufferedImage image = ImageIO.read(stream);
      

      用你自己的替换ThisClassName,一切就绪!

      【讨论】: