gnome 上的 javafx 应用程序名称

标签 java linux javafx gnome

我使用 JavaFX 帮助开发适用于 Linux 和 OSX 的应用程序。在 Linux 上,我们不能在 gnome 顶部栏上显示应用程序名称。我们有 JavaFX 的入口点。该窗口的名称很好,但在 gnome 上我们有类似“com.myApp.javaFXMainClass”的名称。

我和 swing 有同样的问题,我可以用这些代码纠正它:

// Set name in system menubar for Gnome (and Linux)
if (System.getProperty("os.name").toLowerCase().contains("linux")) {
    try {
        Toolkit xToolkit = Toolkit.getDefaultToolkit();
        Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName");
        awtAppClassNameField.setAccessible(true);
        awtAppClassNameField.set(xToolkit, "MyApp"); 
    } catch (Exception e) {
        // TODO
    }
}

如何使用 JavaFX 做到这一点?

最佳答案

package test;

import javafx.application.Preloader;
import javafx.stage.Stage;

public class TestPre extends Preloader {
    @Override
    public void start(Stage stage) throws Exception {
        com.sun.glass.ui.Application.GetApplication().setName("app test");
    }   
}


package test;

import java.io.ByteArrayInputStream;
import java.util.Base64;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                Test __app = new Test();
                Stage __stage = new Stage();
                __app.start(__stage);
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        String __simage = "iVBORw0K.....";
        ByteArrayInputStream __imgstream = new ByteArrayInputStream(Base64.getDecoder().decode(__simage));
        javafx.scene.image.Image __image = new javafx.scene.image.Image(__imgstream);
        primaryStage.getIcons().add(__image);       

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        com.sun.javafx.application.LauncherImpl.launchApplication(Test.class, TestPre.class, args);
    }

}

关于gnome 上的 javafx 应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31219169/

相关文章:

java - 由于 org.hibernate.internal.SessionFactoryImpl 可能导致内存泄漏

java - 在 URL 处的 JSON 文件中查找某些字段

linux - 我可以阻止用户执行二进制文件吗?

c++ - 文件删除(使用取消链接)和释放所有磁盘空间之间的延迟

java - 为什么这个js代码的RSA加密结果和java的RSA标准代码不一样?

java - SonarQube 8.1.0 提示在访问该值之前调用 "Optional#isPresent()"

与 C 中的 sqrt() 函数混淆

java - 在 JFXTreeTableView 单元格中换行文本

javafx-2 - 如何检测 MenuButton 在 Javafx 中打开其菜单的时间?

javafx - 如何获取 TableView 中 ComboBoxTableCell 中选定的值