首页 > 解决方案 > 有没有办法在不使用 Swing 的情况下隐藏 JavaFX 应用程序而不显示在系统托盘中?

问题描述

假设我有一个扩展类的Application类,就像这样。(这是我从另一篇文章中找到的 Web 浏览器实现示例)

public class WebViewBrowser extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(new Scene(new WebViewPane("http://google.com")));
        stage.setFullScreen(true);
        stage.show();
    }

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

class WebViewPane extends Pane {
    final WebView view = new WebView();
    final Button goButton = createGoButton(view.getEngine());

    public WebViewPane(String initURL) {
        view.getEngine().load(initURL);

        getChildren().addAll(view, goButton);

        initLayout();
    }

    private Button createGoButton(final WebEngine eng) {
        Button go = new Button("Refresh");
        go.setDefaultButton(true);
        go.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                eng.reload();
            }
        });

        return go;
    }

    private void initLayout() {
        setMinSize(500, 400);
        setPrefSize(1024, 768);

        view.prefWidthProperty().bind(widthProperty());
        view.prefHeightProperty().bind(heightProperty());

        goButton.setLayoutX(10);
        goButton.layoutYProperty().bind(heightProperty().subtract(20).subtract(goButton.heightProperty()));
    }
}

我要解决的问题是 JavaFX 应用程序在运行时有一个图标显示在系统托盘中。我将使用此应用程序覆盖在另一个正在运行的程序之上。因此,如果系统托盘中的图标显示出来,就会显得不专业。我在这里看到了这个 Stack Overflow 帖子,但我通常希望避免将 Swing 添加到我的程序中,因为试图让这两个 GUI API 相互匹配会很麻烦。我从帖子中的回答中得知,在 JavaFX 8 及更高版本中是可能的。有谁知道一种方法来隐藏这个 JavaFX 应用程序,使其仅使用 JavaFX 而不使用 Swing 在系统托盘中显示?谢谢。

图片:

标签: javaswingjavafxsystem-trayminecraft-forge

解决方案


推荐阅读