我正在使用JavaFX-Gradle-plugin构建可分发的二进制文件和 JavaFX 应用程序的安装程序。当我的应用程序运行时,我可以这样设置图标:
stage.getIcons().add(new Image(this.getClass().getResourceAsStream("/isotype.png")));
正确设置正在运行的应用程序的图标:
以及任务栏:
但是如何设置开始菜单的图标:
可能还有其他地方:
我正在使用JavaFX-Gradle-plugin构建可分发的二进制文件和 JavaFX 应用程序的安装程序。当我的应用程序运行时,我可以这样设置图标:
stage.getIcons().add(new Image(this.getClass().getResourceAsStream("/isotype.png")));
正确设置正在运行的应用程序的图标:
以及任务栏:
但是如何设置开始菜单的图标:
可能还有其他地方:
有一个开放的拉取请求记录了这个here
它说:
自定义图标
要自定义本机包中使用的图标,您必须为相应的包提供图标。图标必须遵循文件名约定才能被拾取。
提示:将
verbose
设置设置为 true,以记录从部署目录中提取的文件。
特别是对于 Microsoft Windows:
视窗
图标位置:
src/main/deploy/windows
对于 Windows,您可以提供两个不同的图标。
- 应用程序图标
- setup icon - 安装程序的图标
| Type | Filename | | :---------------- |:------------------------- | | .exe icon | \<appName>.ico | | setup exe icon | \<appName>-setup-icon.bmp |
尽管它在那里说了什么,但正确的路径src/main/deploy/packages/windows
如adjusted-launcher-icon 示例中所示。
可能您的图像 ( "/isotype.png"
) 的路径不正确。从以下选项中选择一种方法来提供正确的路径。如果存储图标图像:
在文件夹(例如图像)中,然后使用此路径"/images/isotype.png"
,如下所示:
stage.getIcons().add(
new Image(this.getClass().getResourceAsStream("/images/isotype.png")));
在包目录中,然后使用此路径"isotype.png"
,如下所示:
stage.getIcons().add(new Image(this.getClass().getResourceAsStream("isotype.png")));
然后在文件夹结构中使用此路径"../images/isotype.png"
,如下所示:
stage.getIcons().add(
new Image(this.getClass().getResourceAsStream("../images/isotype.png"")));
您必须查看Gradle JavaFX 插件指南,其中描述了 Javafx 包,包括跨平台风格的开始菜单集成、停靠和托盘图标、菜单栏集成和单击图标。为此,如果您计划分发应用程序,则必须在输出文件夹中对文件进行签名,在 7.3.5中使用signtool.exe进行了说明。
现在您必须在build.gradle
as 中设置一些(图标)配置选项:
javafx {
appID 'SampleApp'
appName 'Sample Application'
mainClass 'com.example.sample.Main'
jvmArgs = ['-XX:+AggressiveOpts', '-XX:CompileThreshold=1']
systemProperties = [ 'prism.disableRegionCaching':'true' ]
arguments = ['-l', '--fast']
embedLauncher = false
// deploy/info attributes
category = 'Demos'
copyright = 'Copyright (c) 2013 Acme'
description = 'This is a sample configuration, it is not real.'
licenseType = 'Apache 2.0'
vendor = 'Acme'
installSystemWide = true
menu = true
shortcut = true
// app icons
icons {
shortcut = ['shortcut-16.png', 'shortcut-32.png', 'shortcut-128.png', 'shortcut-256.png', 'shortcut-16@2x.png', 'shortcut-32@2x.png', 'shortcut-128@2x.png']
volume = 'javafx-icon.png'
setup = 'javafx-icon.png'
}
// applet and webstart stuff
debugKey {
alias = 'debugKey'
//keyPass = 'password' // provide via command line
keyStore = file('~/keys/debug.jks')
//storePass = 'password' // provide via command line
}
releaseKey {
alias = 'production'
//keyPass = 'password' // provide via command line
keyStore = file('/Volumes/ProdThumbDrive/production.jks')
//storePass = 'password' // provide via command line
}
signingMode 'release'
width = 800
height = 600
embedJNLP = false
codebase = 'http://example.com/bogus/JNLP/Codebase'
// arbitrary jnlp icons
icon {
href = 'src/main/resources/javafx-icon.png'
kind = 'splash'
width = 128
height = 128
}
icon {
href = 'shortcut-32@2x.png'
kind = 'selected'
width = 16
height = 16
scale = 1
}
}
此处记录了如何执行此操作的一般过程: https ://github.com/BilledTrain380/javafx-gradle-plugin/blob/648acafa7198e9bd7cf1a2ef933456ce5e0b65f9/README.md#customize-icons 但最近我遇到了最新版本的打包程序问题(实际上是蚂蚁任务)以使其正常工作。那里的某些东西似乎被破坏了,因为它适用于较旧(Java 8)版本的打包器,但不适用于最新版本。但是,我能够通过明确指定来使其工作
<fx:bundleArgument arg="icon" value="package/macosx/myapp.icns"/>
在 fx:deploy 部分内。我不知道如何在 Gradle 中做到这一点,因为我使用了 ant,但你应该能够找到它。在旧版本的打包程序中,这不是必需的。
如果您使用 ant build 或 artifact 来构建 javafx 应用程序,请遵循该帖子可能会有所帮助
https://flaironix.com/2019/09/18/adding-custom-icon-for-javafx-application-exe-file-in-intelije/
在工件中使用此选项标记
<option name="icons">
<JavaFxApplicationIcons>
<option name="linuxIcon" value="$PROJECT_DIR$/src/Controller/logo.png" />
<option name="windowsIcon" value="$PROJECT_DIR$/src/Controller/logo.ico"/>
</JavaFxApplicationIcons>
</option>