elementary OS下OpenJDK17运行Java报错及环境配置咨询
问题根因
两个报错均为环境配置问题,和项目代码本身无关:
- 版本不匹配报错:class文件版本62.0对应Java 18,版本61.0对应Java 17。你系统内同时存在多个Java版本,编译时调用的是Java 18的javac编译器,运行时调用的是Java 17的java运行时,因此触发版本不兼容。
- 找不到AWT库报错:elementary OS基于Ubuntu发行版,你当前安装的是无图形界面场景用的
openjdk-17-headless无头版本,没有携带Swing/AWT图形组件依赖的libawt_xawt.so原生库,你的项目是带图形界面的Java程序,加载库时直接失败。
疑问解答
- 不需要强制升级到Java 18。Java 17是长期支持版本,稳定性更好,完全适合入门学习;只要统一编译和运行的Java版本,补全缺失的GUI依赖,就能正常跑项目。如果确实需要Java 18,后面会给出适配新手的安装方法。
- Oracle JDK和OpenJDK不是同一产物:Java 17及以后版本,OpenJDK是完全开源免费的版本,Oracle JDK是Oracle推出的商业发行版,有许可证限制。个人学习场景下OpenJDK功能完全够用,不需要特意折腾Oracle JDK。
操作步骤(适配elementary OS,全程用终端执行即可)
1. 重装完整的OpenJDK 17,修复依赖缺失问题
不要手动下载官网压缩包安装,用系统自带的apt包管理器安装是最不容易出错的方式:
- 先卸载当前不完整的无头版OpenJDK:
sudo apt remove openjdk-17-* --purge
执行后输入你的开机密码,等待卸载完成即可。
- 更新软件源并安装完整的带GUI组件的OpenJDK 17:
sudo apt update && sudo apt install openjdk-17-jdk -y
这个包会自动安装所有图形界面相关的依赖库,包括缺失的libawt_xawt.so。
2. 统一默认Java版本,解决编译运行版本不一致问题
安装完成后执行两条命令检查版本:
javac -version java -version
正常情况两条命令都会输出17开头的版本号。如果版本号不一致,执行以下命令配置默认版本:
sudo update-alternatives --config java sudo update-alternatives --config javac
执行命令后会弹出可选的Java版本列表,输入对应OpenJDK 17条目前面的编号,回车确认即可。
3. 清理旧编译文件,重新运行项目
进入你的项目目录,因为目录名带空格,路径需要加引号:
cd "Contacts Java Classes"
先删除之前编译生成的旧class文件,避免高版本编译的残留文件触发版本报错:
rm *.class
重新编译入口文件:
javac MainWindow.java
编译完成后运行程序:
java MainWindow
此时两个报错都会消失,程序可以正常启动。
可选:安装Java 18的方法
如果后续确实需要用到Java 18,直接执行命令安装即可:
sudo apt install openjdk-18-jdk -y
安装完成后同样用update-alternatives命令把默认java和javac切换到18版本即可,操作步骤和之前切换17版本完全一致。
注意事项
- 不要安装带
headless后缀的OpenJDK包,这类包是给无图形界面的服务器准备的,缺少GUI开发需要的原生库。 - 每次写Java程序前可以先确认下javac和java版本一致,就能避免版本不兼容的报错。
- 新手阶段优先用系统包管理器安装开发环境,不要手动改环境变量、解压官网压缩包,很容易出现路径配置错误。
内容的提问来源于stack exchange,提问作者Straitsfan
相关产品推荐
相关产品推荐

