Abb*_*bby 6 java javafx kotlin
在JavaFX中将png图像设置为舞台图标时(使用Kotlin,但这也是Java中的问题),图标似乎变形了.
我搜索了这个问题,发现了以下几点:
剩下.提供给JavaFx的原始32x32映像.对.图像JavaFx放在任务栏中.
剩下.提供给JavaFx的原始48x48图像.对.图像JavaFx放在任务栏中.
看起来32x32必须按比例放大,48x48必须按比例缩小到42x42左右(我也做了42x42,但这也没有帮助).由于Windows"想要"的大小要么是2或48x48的幂,你会说那些大小会起作用.
我知道这可能是(可能)JavaFX中一个未解决的错误,另一个问题是大约三年前的最后一个活动,我想知道是否有人在此期间找到了更好的解决方法.
我在Kotlin中创建了一个类似于问题页面中提供的MWE,因为您可以轻松地将原始图像与最终在任务栏中的图像进行比较.使用的图像如下:


MWE
class Main : Application() {
override fun start(primaryStage: Stage) {
val icon48 = Image("sample/icon48.png")
val icon32 = Image("sample/icon32.png")
primaryStage.scene = Scene(Group(
ImageView(icon48)
ImageView(icon32)
))
primaryStage.icons.addAll(
icon48,
icon32
)
primaryStage.show()
}
}
fun main(args: Array<String>) {
Application.launch(Main::class.java, *args)
}
Run Code Online (Sandbox Code Playgroud)
针对程序的 Windows 发行版本(最重要的是,这对调试版本没有帮助)的解决方案是使用 launch4j 和 InnoSetup。launch4j 生成一个可执行文件,InnoSetup 围绕它包装一个安装过程。
如何向 Windows 的 JavaFX 应用程序添加漂亮的图标 (并使其可固定到任务栏)
1. 使用 Gradle,添加 launch4j 插件。例如,当使用 Kotlin Gradle DSL 时,添加
plugins {
// Plugin to build .exe files.
id("edu.sc.seis.launch4j") version "2.4.4"
}
dependencies {
// JNA, used to e.g. make a program pinnable to taskbar.
compile("net.java.dev.jna:jna:4.5.1")
compile("net.java.dev.jna:jna-platform:4.5.1")
}
launch4j {
mainClassName = "nl.mynamespace.myapp.MainKt"
icon = "$projectDir/src/main/resources/myapp32.ico"
manifest = "$projectDir/releasing/launch4j/myapp.manifest"
}
Run Code Online (Sandbox Code Playgroud)
并将图标和清单文件放在您指定的路径中,清单包含
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable"
uiAccess="False" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)
2. 运行 Gradle 任务launch4j/createExe。
3.下载InnoSetup。
4..iss根据您的项目调整任何配置 ( ) 文件,例如如下
#define MyAppName "Myapp"
#define MyAppVersion "2.0.0-beta.9"
#define MyAppPublisher "mynamespace"
#define MyAppURL "https://github.com/mynamespace/myapp"
#define MyAppExeName "myapp.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{something generated here}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=..\..\LICENSE
OutputDir=..\innoSetup
OutputBaseFilename=setup_myapp_{#MyAppVersion}
SetupIconFile=..\..\src\main\resources\myapp32.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\..\build\launch4j\myapp.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; Comment: "Myapp {#MyAppVersion}"; AppUserModelID: "nl.mynamespace.myapp.Main"
; create icon shortcut that embeds AppUserModelID information, which is the same as
; set in the program, to enable pinning to taskbar.
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: shellexec postinstall skipifsilent
Run Code Online (Sandbox Code Playgroud)
5. 在 InnoSetup 中,单击构建| 编译。如果所有路径都正确,您现在将拥有一个安装文件,如果您使用它,您将安装 JavaFX 应用程序,您可以将其固定到任务栏。
结果图标:
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |