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

elementary OS下OpenJDK17运行Java报错及环境配置咨询

问题根因

两个报错均为环境配置问题,和项目代码本身无关:

  1. 版本不匹配报错:class文件版本62.0对应Java 18,版本61.0对应Java 17。你系统内同时存在多个Java版本,编译时调用的是Java 18的javac编译器,运行时调用的是Java 17的java运行时,因此触发版本不兼容。
  2. 找不到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:21:46