我想将 Dock 上显示的应用程序名称更改为其他名称,而不是默认的“Java”。
我尝试更改为使用
stage.setTitle("SomeRandomTitle")
,但它仅更改窗口上显示的名称。
我正在使用 Intellij Idea,并且使用的是 MacOS 14.2。
扩展坞上的应用程序名称:
jpackage
自定义 OS X 上的应用程序名称和图标您显示的图像是在 OS X 上运行的 Java 应用程序的默认图标和名称。其显示正常。
要为您的应用程序自定义 OS X Dock 中显示的图标,需要创建应用程序安装程序。
jpackage
可用于创建为应用程序定义自定义图标的安装程序。对于某些发行版,例如通过 Apple 应用程序商店,您可能需要付费开发者证书来签署 OS X 应用程序。
jpackage 文档描述了部分过程:
Apple 提供了获取开发者证书的信息:
需要从Apple获取各类证书。所需的证书类型因应用程序的目标而异(例如,它是否可部署到 Apple App Store)。有关所需证书类型的信息位于链接的
jpackage
文档中。
使用软件:
使用的所有版本均适用于 x64 Mac(M 系列处理器需要适用于 Mac 的 aarch64 JDK/SDK/JMODS 和 M 系列 Mac 来创建适当的包)。
使用了package helloworld;
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 HelloWorld extends Application {
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(e ->
System.out.println("Hello World!");
);
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
还有这个
module-info.java
:
module hello {
requires javafx.controls;
exports helloworld;
}
JAVA_HOME
是:
export JAVA_HOME=`/usr/libexec/java_home -v 21.0.1`
jar 文件是使用以下命令创建的:
javac -p javafx-sdk-21.0.1/lib -d out module-info.java helloworld/HelloWorld.java
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
命令是:
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”正在运行的应用程序的名称:
树:
$ tree
.
├── HelloApp-1.0.dmg
├── HelloApp-1.0.pkg
├── Tatice-Cristal-Intense-Apple-multicolor.icns
├── hello.jar
├── helloworld
│ └── HelloWorld.java
├── javafx-jmods-21.0.1
│ ├── javafx.base.jmod
│ ├── javafx.controls.jmod
│ ├── javafx.fxml.jmod
│ ├── javafx.graphics.jmod
│ ├── javafx.media.jmod
│ ├── javafx.swing.jmod
│ └── javafx.web.jmod
├── javafx-sdk-21.0.1
│ ├── legal
│ │ ├── javafx.base
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ └── LICENSE
│ │ ├── javafx.controls
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ └── LICENSE
│ │ ├── javafx.fxml
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ └── LICENSE
│ │ ├── javafx.graphics
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ ├── LICENSE
│ │ │ ├── jpeg_fx.md
│ │ │ └── mesa3d.md
│ │ ├── javafx.media
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ ├── LICENSE
│ │ │ ├── directshow.md
│ │ │ ├── glib.md
│ │ │ ├── gstreamer.md
│ │ │ └── libffi.md
│ │ ├── javafx.swing
│ │ │ ├── ADDITIONAL_LICENSE_INFO
│ │ │ ├── ASSEMBLY_EXCEPTION
│ │ │ └── LICENSE
│ │ └── javafx.web
│ │ ├── ADDITIONAL_LICENSE_INFO
│ │ ├── ASSEMBLY_EXCEPTION
│ │ ├── LICENSE
│ │ ├── icu_web.md
│ │ ├── libxml2.md
│ │ ├── libxslt.md
│ │ └── webkit.md
│ ├── lib
│ │ ├── javafx-swt.jar
│ │ ├── javafx.base.jar
│ │ ├── javafx.controls.jar
│ │ ├── javafx.fxml.jar
│ │ ├── javafx.graphics.jar
│ │ ├── javafx.media.jar
│ │ ├── javafx.properties
│ │ ├── javafx.swing.jar
│ │ ├── javafx.web.jar
│ │ ├── libdecora_sse.dylib
│ │ ├── libfxplugins.dylib
│ │ ├── libglass.dylib
│ │ ├── libglib-lite.dylib
│ │ ├── libgstreamer-lite.dylib
│ │ ├── libjavafx_font.dylib
│ │ ├── libjavafx_iio.dylib
│ │ ├── libjfxmedia.dylib
│ │ ├── libjfxmedia_avf.dylib
│ │ ├── libjfxwebkit.dylib
│ │ ├── libprism_common.dylib
│ │ ├── libprism_es2.dylib
│ │ └── libprism_sw.dylib
│ └── src.zip
├── module-info.java
└── out
├── helloworld
│ ├── HelloWorld$1.class
│ └── HelloWorld.class
└── module-info.class
我在 OS X Sonoma 14.1.1 上使用
jpackage
以及 JavaFX 21.0.1 和 OpenJDK 21.0.1 创建了 OS X 包。
与我之前尝试使用
jpackage
在 OS X 上创建软件包的经验不同,生成的软件包(pkg
或 dmg
类型)可安装且可用 无需使用开发人员证书签署应用程序。
我不确定这是否有效,因为:
jpackage
创建包的方式略有不同。虽然这可行,但您可能最好进行专业安装,获取并使用 Apple 的付费证书。但至少,对于最近的软件版本,可以在 OS X 上创建一个可运行的已安装应用程序,而无需使用付费证书。
在关于为什么可以执行未签名的应用程序的相关评论中,Trashgod 指出:
您可能在首次启动未签名的应用程序时免除了网守审查,如此处建议。