在 Ubuntu 上使用 Java 图形界面的完整步骤
一 环境准备
- 更新软件源并安装 OpenJDK(以 OpenJDK 11 为例,适合大多数 GUI 应用;如需其他版本,将版本号替换为 8/17/21 等):
- 安装运行时与开发包:sudo apt update && sudo apt install -y default-jre default-jdk
- 或仅安装 JDK:sudo apt install -y openjdk-11-jdk
- 验证安装:java -version 与 javac -version 均应返回版本号且无报错。
二 运行或开发 Java GUI 的两种方式
- 使用 Swing/AWT(内置无需额外依赖)
- 示例 HelloSwing.java:
- import javax.swing.*;
public class HelloSwing {
public static void main(String[] args) {
JFrame f = new JFrame(“Hello Swing”);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300, 200);
f.setLocationRelativeTo(null);
f.add(new JLabel(“Hello, Swing!”, SwingConstants.CENTER));
f.setVisible(true);
}
}
- 编译与运行:
- javac HelloSwing.java
- java HelloSwing
- 使用 JavaFX(需单独 SDK)
- 从 Gluon 下载 JavaFX SDK,解压至如 /opt/javafx-sdk-VERSION
- 编译与运行(两种常用方式):
- 命令行指定模块与库:
- javac --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloFX.java
- java --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloFX
- 或在代码中通过 VM 参数传入:
- java -Djavafx.graphics.headless=false -Djavafx.embedded=true -cp “$PATH_TO_FX/lib/*:.” HelloFX
- 提示:若使用 JDK 11+ 且未将 JavaFX 打包进应用,运行时需通过 --module-path 显式提供 JavaFX。
三 远程或服务器环境的关键设置
- 若在无界面的服务器上运行 GUI,需确保有 X11 显示服务器;通过 SSH 远程开发时启用 X11 转发:ssh -X user@host
- 本地或已登录桌面会话时,确认 DISPLAY 变量:echo $DISPLAY(通常为 :0 或 :1)
- 常见报错与处理:
- “No X11 DISPLAY variable was set …” → 启用 X11 转发或设置 DISPLAY
- “Can’t connect to X11 window server …” → 检查 DISPLAY、X11 服务与权限(如 xhost + 谨慎使用)。
四 常见问题与快速排查
- 命令未找到或版本不对:确认已安装 JDK 而非仅 JRE,并使用 java -version / javac -version 校验
- JavaFX 找不到模块:检查 --module-path 是否指向 JavaFX SDK/lib,并添加所需模块(如 javafx.controls,javafx.fxml)
- 运行缓慢或界面卡顿:在无 GPU 环境下可启用软件渲染(如 -Dprism.order=sw),或考虑使用更轻量的布局与控件
- 多版本并存:使用 update-alternatives 切换默认 java/javac,或在脚本/IDE 中显式指定 JAVA_HOME 与 PATH。