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

openSuse系统双击运行jar文件报java.io.FileNotFoundException错误如何解决

问题根因

  • 你代码里用了相对路径读取配置文件,new File("configs/configs.json")的路径是相对于Java进程的当前工作目录,而非jar文件本身的存放目录
  • 命令行用root运行时你通常会先cd到jar所在目录,当前工作目录匹配,自然能找到配置文件;双击启动时系统默认的工作目录一般是用户家目录(/home/你的用户名),和jar所在目录不一致,就会报找不到文件
  • 额外排查点:如果jar和configs目录存放在需要root权限才能读的路径(比如/opt、/root目录下),普通用户双击运行时权限不足也会触发这个报错

解决方案

方案1:修改代码,固定从jar所在目录读取配置(推荐,一劳永逸)

把读取配置的代码替换成下面的逻辑,先获取jar本身的存放路径,再拼接配置文件路径:

// 获取jar包所在的目录路径
String jarPath = new File(YourMainClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent();
// 拼接配置文件的绝对路径
File f = new File(jarPath + File.separator + "configs" + File.separator + "configs.json");
FileReader file = new FileReader(f);

注意把YourMainClass替换成你项目里主启动类的类名,注:这段代码在IDE开发环境下运行时可能返回项目编译目录,打包为jar后运行会正常返回jar所在目录。

方案2:不修改代码,修改双击启动的启动脚本

如果不想改代码,你可以给jar包写一个启动脚本,指定工作目录后再启动jar:

  1. 在jar所在目录新建启动.sh文件,内容如下:
#!/bin/bash
# 切换到脚本所在目录(也就是jar所在目录)
cd "$(dirname "$0")"
java -jar 你的jar包名字.jar
  1. 给脚本加可执行权限:右键属性→权限→勾选允许作为程序执行,或者终端运行chmod +x 启动.sh
  2. 之后双击这个启动.sh就可以正常启动应用
  • 如果openSuse默认双击sh文件打开文本编辑器,可打开文件管理器→设置→偏好设置→行为,把“可执行文本文件”的选项调整为“运行”或“询问是否运行”即可。

方案3:权限问题的修复

如果是因为jar和configs存放在有权限限制的目录:

  • 把jar和整个configs目录移动到你普通用户的家目录下,比如/home/你的用户名/app/,确保你当前登录的用户对整个目录有读、执行权限
  • 或者终端执行sudo chmod -R 755 你的jar所在目录给所有用户放开读执行权限

内容的提问来源于stack exchange,提问作者Mr. ATC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:03