Intellij Idea 如何在MacOS 14上使用JavaFX将应用名称和图标从默认的“Java”更改为其他名称?

de90aj5v  于 2024-01-05  发布在  Mac
关注(0)|答案(1)|浏览(180)

我想改变应用程序的名称显示在码头上的东西,而不是默认的“Java”。
我试图更改为使用stage.setTitle("SomeRandomTitle"),但它只更改了窗口上显示的名称。
我使用的是Intellij Idea,我使用的是MacOS 14.2。
码头上的应用程序名称:


的数据

pdtvr36n

pdtvr36n1#

在OS X上使用jpackage自定义应用名称和图标

您显示的图像是在OS X上运行的Java应用程序的默认图标和名称。它的显示正常。
要自定义应用程序在OS X dock中显示的图标,需要创建应用程序安装程序。jpackage可用于创建为应用程序定义自定义图标的安装程序。对于某些发行版,例如通过Apple应用商店,您可能需要付费开发人员证书才能签署OS X应用程序。
jpackage文档描述了这一过程的一部分:

  • 在OS X上签名软件包
  • 自定义图标资源

Apple提供有关获取开发者证书的信息:

需要从Apple获得各种类型的证书。所需的证书类型因应用程序的目标而异(例如,它是否可部署到Apple App Store)。有关所需证书类型的信息,请参阅链接的jpackage文档。

自定义图标打包示例

使用的软件:

  • OpenJDK 21.0.1
  • JavaFX 21.0.1 SDK
  • JavaFX 21.0.1 JMODS

所有使用的版本都用于x64 Mac(M系列处理器需要aarch 64 JDK/SDK/JMODS for Mac和M系列Mac来创建相应的软件包)。
HelloWorld.java源。

  1. package helloworld;
  2. import javafx.application.Application;
  3. import javafx.event.ActionEvent;
  4. import javafx.event.EventHandler;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.Button;
  7. import javafx.scene.layout.StackPane;
  8. import javafx.stage.Stage;
  9. public class HelloWorld extends Application {
  10. @Override
  11. public void start(Stage primaryStage) {
  12. Button btn = new Button();
  13. btn.setText("Say 'Hello World'");
  14. btn.setOnAction(e ->
  15. System.out.println("Hello World!");
  16. );
  17. StackPane root = new StackPane();
  18. root.getChildren().add(btn);
  19. Scene scene = new Scene(root, 300, 250);
  20. primaryStage.setTitle("Hello World!");
  21. primaryStage.setScene(scene);
  22. primaryStage.show();
  23. }
  24. public static void main(String[] args) {
  25. launch(args);
  26. }
  27. }

字符串
这个module-info.java

  1. module hello {
  2. requires javafx.controls;
  3. exports helloworld;
  4. }


JAVA_HOME是:

  1. export JAVA_HOME=`/usr/libexec/java_home -v 21.0.1`


jar文件是使用以下命令创建的:

  1. javac -p javafx-sdk-21.0.1/lib -d out module-info.java helloworld/HelloWorld.java
  2. jar --verbose --create -p javafx-jmods-21.0.1 --file hello.jar --module-version 1.0 -C out module-info.class -C out helloworld/HelloWorld.class -C out helloworld/HelloWorld\$1.class


使用的jpackage命令是:

  1. jpackage --icon Tatice-Cristal-Intense-Apple-multicolor.icns --name HelloApp -p javafx-jmods-21.0.1:hello.jar --module hello/helloworld.HelloWorld --type dmg


其中.icns文件是从icon archive获得的(不幸的是,链接中有烦人的广告)。
您可以在这里看到结果,应用程序的自定义图标图像(多色苹果图标)和jpackage命令定义的自定义名称“HelloApp”,而不是运行应用程序的默认文件夹图标和“java”名称:
x1c 0d1x的数据
树:

  1. $ tree
  2. .
  3. ├── HelloApp-1.0.dmg
  4. ├── HelloApp-1.0.pkg
  5. ├── Tatice-Cristal-Intense-Apple-multicolor.icns
  6. ├── hello.jar
  7. ├── helloworld
  8.    └── HelloWorld.java
  9. ├── javafx-jmods-21.0.1
  10.    ├── javafx.base.jmod
  11.    ├── javafx.controls.jmod
  12.    ├── javafx.fxml.jmod
  13.    ├── javafx.graphics.jmod
  14.    ├── javafx.media.jmod
  15.    ├── javafx.swing.jmod
  16.    └── javafx.web.jmod
  17. ├── javafx-sdk-21.0.1
  18.    ├── legal
  19.       ├── javafx.base
  20.          ├── ADDITIONAL_LICENSE_INFO
  21.          ├── ASSEMBLY_EXCEPTION
  22.          └── LICENSE
  23.       ├── javafx.controls
  24.          ├── ADDITIONAL_LICENSE_INFO
  25.          ├── ASSEMBLY_EXCEPTION
  26.          └── LICENSE
  27.       ├── javafx.fxml
  28.          ├── ADDITIONAL_LICENSE_INFO
  29.          ├── ASSEMBLY_EXCEPTION
  30.          └── LICENSE
  31.       ├── javafx.graphics
  32.          ├── ADDITIONAL_LICENSE_INFO
  33.          ├── ASSEMBLY_EXCEPTION
  34.          ├── LICENSE
  35.          ├── jpeg_fx.md
  36.          └── mesa3d.md
  37.       ├── javafx.media
  38.          ├── ADDITIONAL_LICENSE_INFO
  39.          ├── ASSEMBLY_EXCEPTION
  40.          ├── LICENSE
  41.          ├── directshow.md
  42.          ├── glib.md
  43.          ├── gstreamer.md
  44.          └── libffi.md
  45.       ├── javafx.swing
  46.          ├── ADDITIONAL_LICENSE_INFO
  47.          ├── ASSEMBLY_EXCEPTION
  48.          └── LICENSE
  49.       └── javafx.web
  50.       ├── ADDITIONAL_LICENSE_INFO
  51.       ├── ASSEMBLY_EXCEPTION
  52.       ├── LICENSE
  53.       ├── icu_web.md
  54.       ├── libxml2.md
  55.       ├── libxslt.md
  56.       └── webkit.md
  57.    ├── lib
  58.       ├── javafx-swt.jar
  59.       ├── javafx.base.jar
  60.       ├── javafx.controls.jar
  61.       ├── javafx.fxml.jar
  62.       ├── javafx.graphics.jar
  63.       ├── javafx.media.jar
  64.       ├── javafx.properties
  65.       ├── javafx.swing.jar
  66.       ├── javafx.web.jar
  67.       ├── libdecora_sse.dylib
  68.       ├── libfxplugins.dylib
  69.       ├── libglass.dylib
  70.       ├── libglib-lite.dylib
  71.       ├── libgstreamer-lite.dylib
  72.       ├── libjavafx_font.dylib
  73.       ├── libjavafx_iio.dylib
  74.       ├── libjfxmedia.dylib
  75.       ├── libjfxmedia_avf.dylib
  76.       ├── libjfxwebkit.dylib
  77.       ├── libprism_common.dylib
  78.       ├── libprism_es2.dylib
  79.       └── libprism_sw.dylib
  80.    └── src.zip
  81. ├── module-info.java
  82. └── out
  83. ├── helloworld
  84.    ├── HelloWorld$1.class
  85.    └── HelloWorld.class
  86. └── module-info.class

关于最近JDK/JavaFX/OS X版本的Apple签名证书的信息

我在OS X索诺马14.1.1上使用jpackage和JavaFX 21.0.1以及OpenJDK 21.0.1创建了am OS X包。
与我以前尝试使用jpackage在OS X上创建软件包的经验不同,生成的软件包(类型为pkgdmg)是可安装和可用的 *,无需使用开发人员证书 * 签署应用程序。
我不确定这是否有效,因为:

  • Mac OS上的不同安全设置,或者
  • 最近的OS X版本中的更改或
  • JDK 21或其他最新JDK版本的JDK打包工具中的更改,或者
  • 在如何使用jpackage创建包方面有一些细微的差异。

虽然这是可行的,但对于专业安装来说,您可能最好从Apple获得并使用付费证书。但至少,对于最近的软件版本,可以在OS X上创建一个工作安装的应用程序,而无需使用付费证书。

注意事项

在关于为什么未签名的应用程序可以执行的相关评论中,Trashgod指出:
您可以在首次启动应用程序时将未签名的应用程序从看门人审查中豁免,如suggested here
trashgod还提供了有关如何分配应用程序名称的其他信息:
应该在Info.plist中指定所需的捆绑包名称,如下所示。
我认为jpackageInfo.plist中设置了bundle名称,以便应用程序被分配使用jpackage构建应用程序安装程序时配置的名称,这样就不需要手动配置该值。

展开查看全部

相关问题