我想改变应用程序的名称显示在码头上的东西,而不是默认的“Java”。我试图更改为使用stage.setTitle("SomeRandomTitle"),但它只更改了窗口上显示的名称。我使用的是Intellij Idea,我使用的是MacOS 14.2。码头上的应用程序名称:
stage.setTitle("SomeRandomTitle")
的数据
pdtvr36n1#
jpackage
您显示的图像是在OS X上运行的Java应用程序的默认图标和名称。它的显示正常。要自定义应用程序在OS X dock中显示的图标,需要创建应用程序安装程序。jpackage可用于创建为应用程序定义自定义图标的安装程序。对于某些发行版,例如通过Apple应用商店,您可能需要付费开发人员证书才能签署OS X应用程序。jpackage文档描述了这一过程的一部分:
Apple提供有关获取开发者证书的信息:
需要从Apple获得各种类型的证书。所需的证书类型因应用程序的目标而异(例如,它是否可部署到Apple App Store)。有关所需证书类型的信息,请参阅链接的jpackage文档。
使用的软件:
所有使用的版本都用于x64 Mac(M系列处理器需要aarch 64 JDK/SDK/JMODS for Mac和M系列Mac来创建相应的软件包)。HelloWorld.java源。
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); }}
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-info.java
module hello { requires javafx.controls; exports helloworld;}
module hello {
requires javafx.controls;
exports helloworld;
型JAVA_HOME是:
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.javajar --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
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”名称:x1c 0d1x的数据树:
.icns
$ 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
$ 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
│ │ ├── javafx.fxml
│ │ ├── javafx.graphics
│ │ │ ├── LICENSE
│ │ │ ├── jpeg_fx.md
│ │ │ └── mesa3d.md
│ │ ├── javafx.media
│ │ │ ├── directshow.md
│ │ │ ├── glib.md
│ │ │ ├── gstreamer.md
│ │ │ └── libffi.md
│ │ ├── javafx.swing
│ │ └── 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$1.class
│ └── HelloWorld.class
└── module-info.class
型
我在OS X索诺马14.1.1上使用jpackage和JavaFX 21.0.1以及OpenJDK 21.0.1创建了am OS X包。与我以前尝试使用jpackage在OS X上创建软件包的经验不同,生成的软件包(类型为pkg或dmg)是可安装和可用的 *,无需使用开发人员证书 * 签署应用程序。我不确定这是否有效,因为:
pkg
dmg
虽然这是可行的,但对于专业安装来说,您可能最好从Apple获得并使用付费证书。但至少,对于最近的软件版本,可以在OS X上创建一个工作安装的应用程序,而无需使用付费证书。
在关于为什么未签名的应用程序可以执行的相关评论中,Trashgod指出:您可以在首次启动应用程序时将未签名的应用程序从看门人审查中豁免,如suggested here。trashgod还提供了有关如何分配应用程序名称的其他信息:应该在Info.plist中指定所需的捆绑包名称,如下所示。我认为jpackage在Info.plist中设置了bundle名称,以便应用程序被分配使用jpackage构建应用程序安装程序时配置的名称,这样就不需要手动配置该值。
Info.plist
1条答案
按热度按时间pdtvr36n1#
在OS X上使用
jpackage
自定义应用名称和图标您显示的图像是在OS X上运行的Java应用程序的默认图标和名称。它的显示正常。
要自定义应用程序在OS X dock中显示的图标,需要创建应用程序安装程序。
jpackage
可用于创建为应用程序定义自定义图标的安装程序。对于某些发行版,例如通过Apple应用商店,您可能需要付费开发人员证书才能签署OS X应用程序。jpackage文档描述了这一过程的一部分:
Apple提供有关获取开发者证书的信息:
需要从Apple获得各种类型的证书。所需的证书类型因应用程序的目标而异(例如,它是否可部署到Apple App Store)。有关所需证书类型的信息,请参阅链接的
jpackage
文档。自定义图标打包示例
使用的软件:
所有使用的版本都用于x64 Mac(M系列处理器需要aarch 64 JDK/SDK/JMODS for Mac和M系列Mac来创建相应的软件包)。
HelloWorld.java源。
字符串
这个
module-info.java
:型
JAVA_HOME
是:型
jar文件是使用以下命令创建的:
型
使用的
jpackage
命令是:型
其中
.icns
文件是从icon archive获得的(不幸的是,链接中有烦人的广告)。您可以在这里看到结果,应用程序的自定义图标图像(多色苹果图标)和
jpackage
命令定义的自定义名称“HelloApp”,而不是运行应用程序的默认文件夹图标和“java”名称:x1c 0d1x的数据
树:
型
关于最近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上创建软件包的经验不同,生成的软件包(类型为pkg
或dmg
)是可安装和可用的 *,无需使用开发人员证书 * 签署应用程序。我不确定这是否有效,因为:
jpackage
创建包方面有一些细微的差异。虽然这是可行的,但对于专业安装来说,您可能最好从Apple获得并使用付费证书。但至少,对于最近的软件版本,可以在OS X上创建一个工作安装的应用程序,而无需使用付费证书。
注意事项
在关于为什么未签名的应用程序可以执行的相关评论中,Trashgod指出:
您可以在首次启动应用程序时将未签名的应用程序从看门人审查中豁免,如suggested here。
trashgod还提供了有关如何分配应用程序名称的其他信息:
应该在Info.plist中指定所需的捆绑包名称,如下所示。
我认为
jpackage
在Info.plist
中设置了bundle名称,以便应用程序被分配使用jpackage
构建应用程序安装程序时配置的名称,这样就不需要手动配置该值。