Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set application installer icon in JavaFX?

I'm using the JavaFX-Gradle-plugin to build the distribute-able binaries and the installer of a JavaFX application. When my application runs, I'm able to set the icon this way:

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

which correctly sets the icon for the running application:

enter image description here

as well as the task bar:

enter image description here

But how do I set the icons for the start menu:

enter image description here

and potentially other places:

enter image description here

like image 756
pupeno Avatar asked Dec 10 '17 21:12

pupeno


People also ask

What is JavaFX application application?

A JavaFX application defines the user interface container by means of a stage and a scene. The JavaFX Stage class is the top-level JavaFX container. The JavaFX Scene class is the container for all content. Example 1-1 creates the stage and scene and makes the scene visible in a given pixel size.

What is the application thread in JavaFX?

JavaFX uses a single-threaded rendering design, meaning only a single thread can render anything on the screen, and that is the JavaFX application thread. In fact, only the JavaFX application thread is allowed to make any changes to the JavaFX Scene Graph in general.


1 Answers

Maybe the path of your image ("/isotype.png") is incorrect. Choose one method to give correct path from below options. If icon image is stored:

  • In a folder (e.g. images) then use this path "/images/isotype.png" as like:

    stage.getIcons().add(
          new Image(this.getClass().getResourceAsStream("/images/isotype.png")));
    
  • In package directory then use this path "isotype.png" as like:

    stage.getIcons().add(new Image(this.getClass().getResourceAsStream("isotype.png")));
    
  • In a folder structure then use this path "../images/isotype.png" as like:

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

Updated:

You have to take a look at A guide to the Gradle JavaFX Plugin which describes the Javafx packages are complete with cross-platform flair-like start menu integration, dock and tray icons, menu-bar integration, and single click icons. For that you've to Sign your files in the output folder if you plan to distribute the application, stated here in 7.3.5 using signtool.exe.

Now you have to some (icons) configuration options inside of the 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
    }
}
like image 184
stefan Avatar answered Oct 11 '22 22:10

stefan