Как установить значок установщика приложения в JavaFX?

Я использую JavaFX-Gradle-plugin для создания распространяемых двоичных файлов и установщика приложения JavaFX. Когда мое приложение запускается, я могу установить значок следующим образом:

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

который правильно устанавливает значок для запущенного приложения:

enter image description here

а также панель задач:

enter image description here

Но как мне установить иконки для меню "Пуск":

enter image description here

и, возможно, в других местах:

enter image description here

Ответ 1

Существует запрос с открытым притяжением, документирующий этот здесь

В нем говорится:

Настроить значки

Чтобы настроить значки, используемые в родном комплекте, вы должны предоставить значки для соответствующего пакета. Значки должны следовать за соглашением имени файла, чтобы получить его.

Совет. Установите для параметра 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 показан в образ скорректированного образа запуска.

Ответ 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"")));
    

Обновлено:

Вы должны взглянуть на Руководство по плагину JavaFX Gradle, в котором описаны пакеты Javafx, дополнены кросс-платформенными flair-подобный интеграция меню, значки док-станции и лотка, интеграция в меню и однократные значки. Для этого вы должны Подписать свои файлы в выходной папке, если вы планируете распространять приложение, заявил здесь, в 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', '[email protected]', '[email protected]', '[email protected]']
        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 = '[email protected]'
        kind = 'selected'
        width = 16
        height = 16
        scale = 1
    }
}

Ответ 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>