Java - ImageIO.write 的加载文件在 .jar 中不起作用

2024-03-24

我正在用 Java 制作一个游戏,我想将随机生成的地图保存在图像上,然后加载它。我的代码在 Eclipse 中工作没有问题,但是当我将其导出到 .jar/.exe 文件时,创建文件(“mapf”)时出现问题。谢谢您的回答。

private void makeMap(){

    combined = new BufferedImage(maxX*Game.TILESIZE, maxY*Game.TILESIZE+16, BufferedImage.TYPE_INT_ARGB);

    //draw tiles
    Graphics g2 = combined.getGraphics();

    for(int y = 0; y < tiles[1].length; y++){
        for(int x = 0; x < tiles.length; x++){
            if(tiles[x][y] != 0){
                getTile(tiles[x][y]).render(g2, x * Game.TILESIZE, y * Game.TILESIZE);
            }
        }
    }

    //Save as new image     
    try {
        File mapf = new File("res/map.png");  //Here's a problem!!
        ImageIO.write(combined, "PNG", mapf);
    } catch (IOException e) {
        e.printStackTrace();
    }

    ImageLoader loader = new ImageLoader();
    Game.map = loader.load("/map.png");
}

堆栈跟踪:

java.io.FileNotFoundException: res\map.png ([translated] System cannot find path)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at com.sedlacek.dor.level.Level.makeMap(Level.java:237)

您似乎认为可以将 jar 视为目录结构,但事实并非如此。你甚至不应该think写入运行代码的 jar 文件(这是可能的,但涉及many陷阱)。

假设您的目录结构如下所示:

MyProgram
   MyProgram.jar

而MyProgram是工作目录,你看没有res目录。您在 Eclipse 的源代码树中创建的“res”目录是inside罐子。您无法使用文件 API 访问它,也肯定无法向其中写入任何内容。

我不清楚代码显示其背后的目的是什么;如果您每次运行程序时都创建文件,并且仅在该运行中使用它,那么我根本不会保存它。只需返回您创建的 BuffereImage 并直接在需要的地方使用它即可。

如果想法是在first运行并简单地在后续运行中加载它,您需要指定一个您可以确定存在并且可以使用您的程序权限写入的位置。您可以尝试将其直接写入程序文件夹(或在那里创建另一个“res”文件夹),但是可能不可写取决于您的程序在哪个用户下运行。您通常会在程序安装期间设置适当的结构和权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - ImageIO.write 的加载文件在 .jar 中不起作用 的相关文章

  • Eclipse 的 Visual Studio Ctrl+Tab 和 Ctrl+Shift+Tab 等效项

    In Visual Studio I always use Ctrl Tab and Ctrl Shift Tab to navigate between documents I see that Eclipse has Ctrl F6 t
  • Java 8 列表到带有总和的 EnumMap

    我有以下课程 public class Mark private Long id private Student student private Integer value 0 private Subject subject public
  • Java switch case 抛出 nullPointer 异常

    我有一个枚举声明如下 public enum Status REQ URL1 NOT URL2 GET URL3 String getURL Status String getURL this getURL getURL 我班上的一个领域
  • 如何在同一个项目中连接两个数据库MySQL和MongoDB?是否可以?

    目前我正在使用 Hibernate MySQL 和 Spring 配置对我来说运行良好 但是一旦我配置了另一个配置 mongo config xml 文件并尝试使用 mongodb 运行测试用例 它就显示创建名为 的 bean 时出错从第一
  • 尽管设置为 1.7,IntelliJ IDEA 13 仍使用 Java 1.5

    尽管在所有项目设置中指定了 JDK 1 7 包括File gt Project Structure gt Project Project SDK 则产生以下错误IntelliJ 13当尝试编译一些使用菱形运算符的简单 Java 7 代码时
  • 为什么 JPA/hibernate 不能映射到 MySQL blob 类型?

    我收到以下错误 Caused by org hibernate HibernateException Wrong column type in TestTable for column PAYLOAD Found blob expected
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 从文件执行db语句

    我在我的应用程序中使用嵌入式 Apache derby 我有一个名为的 SQL 脚本创建的数据库 sql创建数据库中的所有表并用初始数据填充它 例如 SET SCHEMA APP CREATE TABLE study study id bi
  • 什么时候使用弱引用? [复制]

    这个问题在这里已经有答案了 我了解什么是 Java WeakReference 我想知道的是它通常用于解决哪种具体问题 有没有包含它们的模式 WeakReference and SoftReference当您想保留某些东西以备再次需要时使用
  • Java如何处理IF语句和效率

    我只是好奇 Java 实际是如何工作的if声明 注意 当我在下面说 组件 时 我指的是语句检查的各个部分 例如a b c 哪个在计算方面更有效 if a b c do stuff or if a if b if c do stuff 我之所
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 强制预先加载原本延迟加载的属性

    我有一个 Hibernate 对象 它的属性都是惰性加载的 大多数这些属性是其他 Hibernate 对象或 PersistentSet 现在我想强制 Hibernate 一次性加载这些属性 当然 我可以 触摸 这些属性中的每一个objec
  • 如何反序列化数组 google-gson 内的数组

    我有这样的 JSON Answers Locale Ru Name Name1 Locale En Name Name2 Locale Ru Name Name3 Locale En Name Name4 正如你所看到的 我的数组里面有数组
  • 如何在 Java 中以编程方式获取接口的所有实现的列表?

    我可以通过反思或类似的方式来做到这一点吗 我已经搜索了一段时间 似乎有不同的方法 这里总结一下 反思 https github com ronmamo reflections如果您不介意添加依赖项 该库非常受欢迎 它看起来像这样 Refle
  • File.Delete 进程无法访问该文件,因为该文件正在被另一个进程使用

    public bool DownloadMp3File DownloadedMp3 mp3 WebClient client new WebClient string filePath bool wasDownload false try
  • 设置 eclipse 进行 Windows 驱动程序开发

    我正在尝试使用 WDK 7 1 0 编写用户模式 Windows XP Vista 和 7 虚拟打印机驱动程序 我打算使用 eclipse IDE 进行开发 所以想知道是否可以进行相同的设置 我希望做以下事情 1 Eclipse 能够识别
  • Eclipse PHP IDE - 自定义自动完成标签

    Eclipse IDE 新手 想知道是否有一种方法可以添加自动完成 更改 这样如果我输入 mres 它会将其翻译为 mysql real escape string 我知道正常的 PHP 代码完成 但看不到任何有关创建自定义快捷方式的信息
  • 优化Gson反序列化

    优化反序列化的最佳方法是什么 我目前正在使用标准 Gson toJson 和 Gson fromJson 方法来序列化和反序列化一些复杂对象 我希望尽可能减少反序列化时间 如果重要的话 我的最复杂的对象包含 43 个变量 如果你想使用 Gs
  • 使用java读取行并映射过滤数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions publi

随机推荐

  • 如何使用反射获取对象的属性?

    我知道我能做到 foreach PropertyInfo property in myobject GetType GetProperties if property DeclaringType ToString myobject GetT
  • Cuda 计算模式和“CUBLAS_STATUS_ALLOC_FAILED”

    我的集群中有一台主机 有 8 个Nvidia K80我想将其设置为每个设备最多可以运行 1 个进程 以前 如果我在主机上运行多个作业并且每个作业都使用大量内存 它们都会尝试访问同一设备并失败 我将所有设备设置为计算模式 3 E Proces
  • ActivityThread:找不到源

    我正在开发一个 Android 应用程序来比较两个静态图像 但是当我尝试调试该项目时 我在 ActivityThread 中找不到源代码 这是我的代码 查找器类 package com example testmatching import
  • Laravel 中的 Associate()

    我有 2 个模型 一个用户和一个地址 自从我读到它以来 我仍在尝试 Associate https laravel com docs 5 6 eloquent relationships updating belongs to relati
  • 为Windows应用程序实现webrtc数据通道[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有谁知道如何向用 C 构建的 Windows 应用程序实现 WebRTC DataChannel API 以便在 NAT 后面的客户端
  • Logstash 配置:检查布尔字段是否存在

    使用Logstash 1 4 2 我有一个字段myfield这是我的 JSON 文档中的布尔值 为了检查它是否存在 不关心布尔值 我使用了 if myfield exists else doesn t exist 测试该条件语句的结果是 m
  • 如何将换行符放入 R 中 xtable 的列标题中

    我有一个数据框 我正在将其放入sweave http www stat uni muenchen de leisch Sweave 使用 xtable 的文档 但是我的列名之一很长 我想将其分成两行以节省空间 calqc table lt
  • Weblogic:调用不带架构名称的 DB2 存储过程(属性 currentSchema)

    我有一个在 Weblogic 上运行的 Java 应用程序 应用程序需要访问 DB2 数据库中的存储过程 因此 JDBC 数据源是通过其 JNDI 名称来配置和访问的 数据源 ClassDriver com ibm db2 jcc DB2D
  • XSLT 生成 UUID

    如何使用纯 XSLT 生成 UUID 基本上是寻找一种使用 XSLT 创建独特序列的方法 该序列可以是任意长度 我正在使用 XSLT 2 0 这是一个好例子 http www pure xml com cblog index php arc
  • 如何使用 EPPlus 在 C# 中逐行读取 Excel 文件

    在我的 MVC 控制器中 我试图逐行读取 Excel 但是有一个问题 我希望能够将其映射到列表 模型类包含29个字段 public class GroupMembershipUploadInput public string chpt cd
  • 在 Visual Studio 中发布程序

    我是 Visual Studio 的新手 我正在尝试弄清楚如何 发布 我的程序 以便我可以将其移动到其他计算机并从那里运行它 我不确定这是否有什么不同 但我的解决方案中有三个项目 如果我发布它 我是否仍然能够继续开发原始文件等 多谢 好的
  • 画一条平滑的线

    我正在使用 libgdx 开发游戏 我想使用形状渲染器绘制一条平滑的线条 shaperenderer begin ShapeType Line shaperenderer line fisrstVec2 secondVec2 shapere
  • 如何通过Selenium和WebDriverWait等待元素包含特定属性?

    我有一个关于硒的问题是否有人可以帮忙 我需要进入一个 URL 页面 该页面上的节点最初处于 已注册 状态 X 秒后 其状态将动态更改为 就绪 状态 在其状态转变为 就绪 状态之前 我可能会在 selenium 执行期间继续执行后续步骤 这是
  • 使用 picasso 从 api 加载 recyclerview 中的图像

    使用 picasso 从 api 在 RecyclerView 中添加图像 使用Picasso加载图像非常简单 你可以这样做Picasso get load http i imgur com DvpvklR png into imageVi
  • 根据标签绘制分配颜色

    我确信有一个非常简单的方法可以做到这一点 但我一生都无法弄清楚 我正在 Plot ly 中绘制散点图 我绘制的每个点都被分配了一个标签 例如通过 高 低 西格玛高等 我的问题是我似乎无法修复plot ly 分配给每个标签的颜色 我希望 Pa
  • 将 Mechanize 设置为接受 cookie

    我正在尝试使用 mechanize 从网站检索一些数据以自动搜索公寓 无垃圾邮件 但是 当我向该站点发送请求时 响应具有以下标头 header Cache Control no store no cache max age 0 must r
  • IIS 7.5/Windows Server 2008 上的 PHP 错误日志

    我很困惑应该在运行 IIS 7 5 的 Windows 2008 Server 上寻找包含 php 错误的日志文件 我更熟悉 Mac OS X 的设置 在我的 php ini 文件中 我将 log errors 设置为 On 但我没有在该文
  • 在 CLion 中使用 WSL 工具链时如何启用 Rust 调试?

    我是 Rust 新手 现在在 Windows 上使用 CLion 和 JetBrains 的 Rust 插件 当我刚刚编译并运行时它运行良好 但是当我开始调试时 即使我将工具链切换到 WSL 它也会显示这样的对话框 我想知道 WSL 是否是
  • 在 React 中创建的选择控件不会在浏览器刷新时重置(IE11 和 Edge)

    我有一个非常简单的 React 应用程序 只有一个选择控件 查看工作应用程序here http www webpackbin com 4JyNOWVpW 选择控件有 3 个值 星期日 星期一和星期二 星期日是默认值 不幸的是 在 IE11
  • Java - ImageIO.write 的加载文件在 .jar 中不起作用

    我正在用 Java 制作一个游戏 我想将随机生成的地图保存在图像上 然后加载它 我的代码在 Eclipse 中工作没有问题 但是当我将其导出到 jar exe 文件时 创建文件 mapf 时出现问题 谢谢您的回答 private void