【问题标题】:How to set application installer icon in JavaFX?如何在 JavaFX 中设置应用程序安装程序图标?
【发布时间】:2018-05-24 10:07:32
【问题描述】:

我正在使用JavaFX-Gradle-plugin 构建可分发的二进制文件和JavaFX 应用程序的安装程序。当我的应用程序运行时,我可以这样设置图标:

stage.getIcons().add(new Image(this.getClass().getResourceAsStream("/isotype.png")));

正确设置正在运行的应用程序的图标:

还有任务栏:

但是如何设置开始菜单的图标:

可能还有其他地方:

【问题讨论】:

  • 我知道如何在javapackager 中做到这一点。它有帮助吗,或者您需要 Gradle 解决方案(我不确定)?

标签: java windows javafx installation javafx-gradle-plugin


【解决方案1】:

有一个公开的拉取请求记录了这个here

上面写着:

自定义图标

要自定义本机包中使用的图标,您必须为相应的包提供图标。 图标必须遵循文件名约定才能被拾取。

提示:将 verbose 设置为 true,以记录从部署目录中提取的文件。

特别是对于 Microsoft Windows:

窗口

图标位置:src/main/deploy/windows

对于 Windows,您可以提供两个不同的图标。

  • 应用程序图标
  • 设置图标 - 安装程序的图标

| Type | Filename | | :---------------- |:------------------------- | | .exe icon | \<appName>.ico | | setup exe icon | \<appName>-setup-icon.bmp |

尽管它在那里说,正确的路径是 src/main/deploy/packages/windows,如 adjusted-launcher-icon example 中所示。

【讨论】:

  • 谢谢。我不知道详细。那个图标位置似乎不是正确的(我试过了,但没有用),详细指出了这一点:Using default package resource [application icon] (add package/windows/Dashman.ico to the class自定义路径)。到目前为止,将其放在资源和 src 上并没有奏效。我还在玩它。
  • 我在很多目录下也试过deploy/windows/Dashman.ico,没有任何效果。
  • 我找到了正确的路径,编辑了这个问题,还在拉取请求中添加了评论。
  • @Pablo 真棒!
【解决方案2】:

可能您的图片路径 ("/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"")));
    

更新:

您必须查看A guide to the Gradle JavaFX Plugin,它描述了 Javafx 包,其中包含跨平台风格的开始菜单集成、停靠和托盘图标、菜单栏集成和单击图标。为此,如果您打算分发应用程序,则必须在输出文件夹中签名您的文件,如here in 7.3.5 使用signtool.exe

现在您必须在build.gradle 中设置一些(图标)配置选项:

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
    }
}

【讨论】:

  • 路径正确,该代码仅在应用程序运行时有效,而开始菜单和要卸载的程序列表不需要应用程序运行。我更新了答案以表明它在应用程序运行时有效。
  • 不,因为它不适用。
  • 尝试更改您在stage.getIcons().add(new Image(this.getClass().getResourceAsStream("isotype.png"))); 中的目录并制作二进制文件?
  • 应用程序代码对开始菜单没有影响。如果我删除“/”,它只是在启动时找不到图标。
  • @Pablo 你可以在我的回答中没有检查链接Gradle JavaFX 插件指南,它还描述了跨平台(Windows 或 Mac)的正确路径?
【解决方案3】:

此处记录了如何执行此操作的一般过程: https://github.com/BilledTrain380/javafx-gradle-plugin/blob/648acafa7198e9bd7cf1a2ef933456ce5e0b65f9/README.md#customize-icons 但最近我在使用最新版本的打包程序(实际上是 ant 任务)时遇到了问题。那里的某些东西似乎被破坏了,因为它适用于较旧的(Java 8)版本的打包程序,但不适用于最新版本。但是,我能够通过明确指定来使其工作

<fx:bundleArgument arg="icon" value="package/macosx/myapp.icns"/>

在 fx:deploy 部分中。我不知道如何在 Gradle 中做到这一点,因为我使用了 ant,但你应该能够找到它。在旧版本的打包程序中,这不是必需的。

【讨论】:

    【解决方案4】:

    如果您使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2013-12-17
      • 2018-01-03
      • 2011-03-16
      相关资源
      最近更新 更多