You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打包为.jar文件后无法读取资源的问题求助

问题分析与解决方案

错误原因

你用FileInputStream读取JAR包内的资源是错误的:

  • IDE运行时,资源是文件系统里的真实文件,getResource().getFile()能拿到有效路径,FileInputStream可以正常读取
  • 打包成JAR后,资源是JAR内部的压缩条目,并非独立文件,getResource().getFile()返回的是类似file:xxx.jar!/path的URL路径,这不是操作系统能识别的文件路径,因此FileInputStream会抛出FileNotFoundException

修复代码

替换原有的资源读取逻辑,改用getResourceAsStream()直接获取输入流,无需依赖文件路径:

try (InputStream is = Shader.class.getClassLoader().getResourceAsStream(sourceVertex)) {
    if (is == null) {
        throw new IllegalArgumentException("资源文件不存在: " + sourceVertex);
    }
    sourceVertex = new String(is.readAllBytes());
} catch (IOException e) {
    e.printStackTrace();
}

关键说明

  • getResourceAsStream()会直接从类路径(包括JAR包内)读取资源,返回的输入流可以直接读取资源内容
  • 务必添加空值判断:如果资源路径错误,getResourceAsStream()会返回null,提前判断可以避免后续的NullPointerException
  • 使用try-with-resources语法,确保输入流自动关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者Danila Maximov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:50:33