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

Java卡牌游戏导出Jar/CMD启动时遇java.io.FileNotFoundException求助

解决Java项目导出Jar/CMD启动时资源文件找不到的问题

问题根源

你遇到的FileNotFoundException完全是资源路径的错误使用导致的:

  • Eclipse运行时,src是文件系统中的真实目录,所以带src的路径或相对文件系统的路径能正常访问。
  • 但导出Jar后,src目录不会被打包进Jar,所有资源会被整合到类路径(classpath)内部,此时通过FileInputStream访问文件系统路径、或使用带src的路径,自然找不到资源。

具体解决方案

1. 修正图片资源路径

原代码:

new ImageIcon(getClass().getResource("/src/controller/resource/account.jpg"));

错误点:/src/是Eclipse项目的源目录路径,Jar中不存在这个目录。

修改为(去掉src/前缀,使用类路径绝对路径):

new ImageIcon(getClass().getResource("/controller/resource/account.jpg"));

说明:编译后,src/controller/resource/account.jpg会被复制到类路径根目录下的controller/resource/account.jpg,所以用类路径绝对路径可以直接访问。

2. 修改音频资源的读取方式

原AudioManager用FileInputStream读取文件,只能访问文件系统中的独立文件,无法读取Jar内部的资源。必须改用类加载器获取输入流。

修改后的play方法:

public void play(String resourcePath) {
    try {
        // 通过类加载器获取Jar内资源的输入流
        InputStream in = getClass().getResourceAsStream(resourcePath);
        if (in == null) {
            throw new FileNotFoundException("Resource not found: " + resourcePath);
        }
        AudioInputStream audioIn = AudioSystem.getAudioInputStream(new BufferedInputStream(in));
        clip = AudioSystem.getClip();
        clip.open(audioIn);
        clip.start();
        
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    } catch (UnsupportedAudioFileException e1) {
        e1.printStackTrace();
    } catch (LineUnavailableException e1) {
        e1.printStackTrace();
    }
}

对应的调用代码(去掉./src/前缀,使用类路径绝对路径):

AudioManager.getInstance().play("/resource/sposta.wav");

通用规范建议

  • 统一资源目录:将所有资源(图片、音频等)放到src下的专门目录(如resources),并在Eclipse中右键该目录 → Build Path → Use as Source Folder。这样编译和打包时,资源会自动被复制到类路径根目录,路径更清晰。
  • 路径大小写:Jar内的路径是大小写敏感的,确保代码中的路径和资源文件名完全匹配(Windows文件系统不区分大小写,但Linux/Jar环境区分)。
  • 打包验证:导出Jar时,在Eclipse的导出向导中,确认所有资源文件被勾选包含,避免资源遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:34