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

Linux下JavaFX窗口打开/关闭对话框时抖动问题求助

Ubuntu 22.04下JavaFX对话框触发主窗口抖动及最大化按钮异常问题

问题现象

在Ubuntu 22.04原生系统上运行JavaFX应用时,打开或关闭任意类型Dialog(如Alert)时,主窗口会出现抖动;同时观察到对话框显示期间,主窗口的最大化按钮消失,关闭对话框后按钮恢复。该问题仅在Linux系统的JavaFX应用中出现,Windows系统下运行正常,本机Swing应用无此异常。

测试环境

  • Java版本:21.0.3+9
  • JavaFX版本:19.0.2.1
  • 操作系统:Ubuntu 22.04(原生未定制,未修改系统窗口管理器配置)

极简测试代码

public class Test extends Application
{
   @Override
   public void start( Stage stage )
   {
       Button button = new Button( "Test" );
       button.setOnAction( e -> {
          Alert alert = new Alert(Alert.AlertType.NONE, "Hello", ButtonType.CLOSE );
          alert.initOwner( stage.getScene().getWindow() );
          alert.showAndWait();
       } );
       VBox vbox = new VBox();
       vbox.getChildren().add( button );
       stage.setScene( new Scene( vbox, 600, 800 ) );
       stage.show();
   }
}

排查与解决建议

  • 版本兼容性调整:Java 21建议搭配同版本的JavaFX(21.x)使用,版本不匹配可能引发窗口管理兼容性问题,尝试升级JavaFX到最新稳定版。
  • 指定GTK后端版本:添加VM启动参数-Djdk.gtk.version=3,强制JavaFX使用GTK3窗口后端,部分旧版本JavaFX在GTK2下可能存在窗口交互异常。
  • 禁用系统窗口动画:临时关闭GNOME的窗口动画验证是否为动画冲突,执行命令:gsettings set org.gnome.desktop.interface enable-animations false,若问题消失,可调整系统动画设置或等待JavaFX后续版本修复。
  • 调整对话框模态设置:尝试移除alert.initOwner(stage.getScene().getWindow())或设置alert.initModality(Modality.NONE),排查是否为窗口owner关联的聚焦管理逻辑导致异常(此方法会失去对话框模态效果,仅用于测试)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:48