【问题标题】:Creating Data In A Res-Folder inside a JAR-File在 JAR 文件内的 Res 文件夹中创建数据
【发布时间】:2015-07-24 23:13:53
【问题描述】:

对于我的一个项目,我发现有必要将给定的颜色值 int[] 保存为 png 文件。 png 将表示由颜色值表示的瓦片地图。 BufferedImage 的生成和保存过程已经很好了。

public BufferedImage getTileImage() {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            image.setRGB(j, i, tiles[j+i*width].getType());
        }
    }
    return image;
}

public void safeMap(String mapname) {
    File file = new File("res/maps/"+mapname+".png");
    try {
        ImageIO.write(getTileImage(), "png",file );
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

当我将它导出为可执行的 JAR 文件时,就会出现问题,因为 ImageIO.write() 方法似乎无法与 JAR 文件中的相对路径一起正常工作。 (我的猜测是你只能在结构内部读取,不能写入)

什么是解决这个问题的好方法?有没有办法在不使用外部资源文件夹的情况下实现这一点?

【问题讨论】:

  • 您需要将其保存到 jar 中还是临时文件夹就足够了?
  • 我希望它永久保存,目的是稍后在多人游戏中使用它来在玩家之间转移不同的地图。不过,一个临时文件夹将是一个好的开始。

标签: java executable-jar


【解决方案1】:

不要将其保存到 JAR 文件中。我还有一个游戏,我需要创建将进入 JAR 文件的文件。我通过在我的 IDE 中执行代码来创建这些文件。这些文件进入最终将放入我的 JAR 的资源目录。在我的情况下,目录位于 /src/ 中。但如果您使用具有标准目录布局的 Maven,它们很容易进入 src/main/resources。

如果您在 IDE 之外执行此操作,而不是您的开发工作的一部分,那么您可以将其存储在 tempt 文件夹或 user.home 之外的文件夹中。要获取进入系统临时文件夹的临时文件,您可以执行以下操作...

File colorsFile = File.createTempFile("color_generator", ".png"); 

【讨论】:

    【解决方案2】:

    如果图片是游戏的资产(由你为所有玩家生成),在你项目的resources文件夹中生成,并在生成jar文件时包含。

    如果图像是动态生成的(由玩家),你不能把它放在罐子里,因为你不应该动态地改变罐子(其他玩家也看不到它):你必须将它放在服务器上/在您的数据库中并构建一个网络服务来共享它。

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2015-05-22
      • 2015-09-09
      相关资源
      最近更新 更多