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

JavaFX透明Stage设置宽高报错,求排查是Bug还是操作问题

透明Stage调整尺寸报错的问题分析与解决

这是JavaFX在Linux GTK桌面环境下使用StageStyle.TRANSPARENT时的已知兼容性问题,并非你的代码操作有误。

问题原因

当直接调用Stage.setWidth()或setHeight()修改透明Stage的尺寸时,JavaFX与GTK窗口管理器的交互存在bug,导致GTK无法正确获取到有效的窗口高度(被错误计算为0),触发了gtk_window_resize的height > 0断言检查,从而抛出错误。

解决方案

不要直接修改Stage的尺寸,改为调整关联的Scene的宽高,JavaFX会自动同步Stage的大小,绕过GTK的断言问题。

修改后的代码示例:

public class Test11 extends Application {

    @Override
    public void start(Stage primaryStage) {

        var button = new Button("Test");
        button.setOnAction(e -> {
            Scene scene = primaryStage.getScene();
            scene.setWidth(scene.getWidth() - 10);
            // 如果需要调整高度,同样修改scene的height即可
            // scene.setHeight(scene.getHeight() - 10);
        });
        var vBox = new VBox(button);
        vBox.setStyle("-fx-background-color: yellow");
        var scene = new Scene(vBox, 400, 300);
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}

补充说明

如果需要同时调整宽高,直接调用scene.setWidth()和scene.setHeight()即可,这种方式能确保GTK窗口管理器接收到有效的非零尺寸值,避免触发断言错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:19:57