Ubuntu 22.04下JavaFX应用窗口抖动与菜单脱离问题求助
问题描述
在Ubuntu 22.04系统中运行JavaFX应用时出现以下异常:
- 打开新窗口或消息框时,窗口及消息框会短暂抖动
- 移动窗口时,已展开的菜单会脱离窗口
该应用在Lubuntu 22.04及Windows 10系统中运行正常。
复现代码如下:
import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.io.IOException; public class Application extends javafx.application.Application { @Override public void start(Stage stage) throws IOException { MenuBar menuBar = new MenuBar(); Menu menu = new Menu("Menu"); MenuItem menuItem1 = new MenuItem("MenuItem 1"); MenuItem menuItem2 = new MenuItem("MenuItem 2"); menuBar.getMenus().add(menu); menu.getItems().addAll(menuItem1, menuItem2); menuBar.setPrefHeight(30d); Button button = new Button("Messagebox"); button.prefWidth(100d); button.prefHeight(30d); button.setOnAction(actionEvent -> { Alert alert = new Alert(Alert.AlertType.INFORMATION); alert.setTitle("Messagebox"); alert.setHeaderText(null); alert.setContentText("Message..."); alert.showAndWait(); }); StackPane stackPane = new StackPane(button); stackPane.setPadding(new Insets(50)); VBox vbox = new VBox(); vbox.getChildren().add(menuBar); vbox.getChildren().add(stackPane); Scene scene = new Scene(vbox); stage.setWidth(500); stage.setHeight(400); stage.setTitle("Hello!"); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }
解决方案
这类问题通常是Ubuntu 22.04默认的GNOME桌面与JavaFX窗口渲染后端不兼容导致的,可尝试以下几种解决方法:
1. 切换JavaFX窗口渲染后端
运行应用时添加启动参数,强制使用GTK3后端:
java -Djdk.gtk.version=3 -jar your-app.jar
若使用Maven/Gradle运行,可在VM参数中加入该配置。
2. 禁用客户端窗口装饰
通过启动参数让系统负责窗口装饰:
java -Djavafx.platform=gtk -Djavafx.stage.style=DECORATED -jar your-app.jar
也可在代码中直接设置Stage样式:
stage.initStyle(StageStyle.DECORATED);
3. 安装GTK3依赖库
确保系统已安装必要的GTK3组件:
sudo apt install libgtk-3-0 libgtk-3-dev
4. 升级OpenJFX版本
若当前使用的JavaFX版本较旧,升级到最新稳定版(如17.x或21.x),新版本通常修复了更多桌面环境兼容性问题。
5. 切换到Xorg会话
Ubuntu 22.04默认使用Wayland会话,部分JavaFX应用在Wayland下存在渲染异常。登录时选择「Ubuntu on Xorg」会话后再运行应用。
内容的提问来源于stack exchange,提问作者Tomar
相关产品推荐
相关产品推荐

