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

MacOS Ventura下VS Code运行Java程序出现JNI错误求助

解决MacOS Ventura下VS Code运行Java程序出现JNI错误(Error decoding percent encoded characters)

问题背景

  • 环境:2018款MacBook Pro(Ventura系统)、Oracle JDK 19.0.1、VS Code + Java Extension Pack
  • 症状:所有Java程序(包括简单的HelloWorld)运行时抛出JNI错误,错误栈核心为java.lang.IllegalArgumentException: Error decoding percent encoded characters;已确认javac和java版本均为19.0.1,删除旧的Eclipse Temurin JDK后问题仍存在

错误栈详情:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.IllegalArgumentException: Error decoding percent encoded characters
        at java.base/sun.net.www.ParseUtil.decode(ParseUtil.java:218)
        at java.base/jdk.internal.loader.FileURLMapper.getPath(FileURLMapper.java:64)
        at java.base/jdk.internal.loader.FileURLMapper.exists(FileURLMapper.java:73)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader.getJarFile(URLClassPath.java:826)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader$1.run(URLClassPath.java:771)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader$1.run(URLClassPath.java:765)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:764)
        at java.base/jdk.internal.loader.URLClassPath$JarLoader.<init>(URLClassPath.java:738)
        at java.base/jdk.internal.loader.URLClassPath$3.run(URLClassPath.java:502)
        at java.base/jdk.internal.loader.URLClassPath$3.run(URLClassPath.java:485)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
        at java.base/jdk.internal.loader.URLClassPath.getLoader(URLClassPath.java:484)
        at java.base/jdk.internal.loader.URLClassPath.getLoader(URLClassPath.java:452)
        at java.base/jdk.internal.loader.URLClassPath.getResource(URLClassPath.java:321)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:757)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:495)
        at java.base/java.lang.Class.forName(Class.java:474)
        at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:790)
        at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:685)

解决方案

1. 检查并修正项目路径

该错误90%以上是因为项目或文件路径包含空格、非ASCII字符(如德语变音符号、中文等),Java类加载器解析URL编码时失败:

  • 确认Java文件所在目录路径是否存在特殊字符(例如~/Documents/Java Kurs/或带ä/ö/ü的路径)
  • 将项目迁移到纯英文、无空格的路径下(如~/Documents/JavaProjects/),重新运行程序

2. 彻底清理旧JDK残留

即使删除了Temurin JDK,系统可能仍有残留配置:

  • 查看系统已安装的JDK列表:
    /usr/libexec/java_home -V
    
  • 如果输出显示仍有其他JDK,手动删除对应目录:
    sudo rm -rf /Library/Java/JavaVirtualMachines/[旧JDK文件夹名]
    
  • 打开VS Code设置(Cmd+,),搜索java.home,确认路径指向/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home,若有其他路径则修改或清空,让VS Code自动检测

3. 重置VS Code Java插件缓存

插件缓存异常可能导致运行逻辑出错:

  • 关闭VS Code,执行以下命令删除缓存:
    rm -rf ~/.vscode/extensions/redhat.java-*/language-server
    rm -rf ~/.cache/jdt-language-server
    
  • 重新打开VS Code,等待Java Extension Pack完成初始化

4. 终端手动运行排查插件问题

排除VS Code插件干扰,直接在终端编译运行:

  • 进入Java文件所在目录,执行:
    javac HelloWorld.java
    java HelloWorld
    
    • 若终端运行正常,说明问题出在VS Code插件配置,可尝试重装Java Extension Pack
    • 若终端也报错,确认路径无特殊字符后,重新安装JDK 19.0.1

5. 验证JAVA_HOME配置有效性

确保Zsh环境变量配置正确:

  • 打开~/.zshenv,添加或修改为:
    export JAVA_HOME=$(/usr/libexec/java_home -v 19.0.1)
    export PATH=$JAVA_HOME/bin:$PATH
    
  • 执行source ~/.zshenv生效,再运行echo $PATH,确认/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home/bin位于PATH最前端,避免系统优先调用其他JDK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:01:09