Creating a desktop icon using JWS JNLP for a JavaFX app

13,488

Solution 1

I would try the following, in order:

  1. Create an icon of 32x32 in size and add it as an additional <icon kind="shortcut".... The spec says that size is used for desktop icons.
  2. Use your 64x64 icon as the "default". For example, your new <icon> elements would be:

    <icon href="res/icon64x64.png" width="64" height="64"/>
    <icon kind="shortcut" href="res/icon32x32.png" width="32" height="32"/>
    <icon kind="shortcut" href="res/icon64x64.png" width="64" height="64"/>
    
  3. Remember that your images are accessed relative to your codebase attribute in your jnlp xml element

  4. If none of those work, you are welcome to compare your JNLP to one of mine that works.

I realize that this JNLP stuff is kind of a pain. Hope one of these work for you.

Solution 2

I suppose the problem in your case is the missing CODEBASE attribute. See one working snippet:

<?xml version="1.0"?>
<jnlp spec="1.5+" 
      codebase="http://www.sweethome3d.com/" 
      href="SweetHome3D.jnlp">
  <information>
    <title>Sweet Home 3D</title>
    <vendor>eTeks</vendor>
    <homepage href="http://www.sweethome3d.com/"/>
    <description>Sweet Home 3D</description>
    <description kind="short">Arrange the furniture of your house</description>
    <icon href="SweetHome3DIcon.gif"/>
    <icon kind="splash" href="SweetHome3DSplashScreen.jpg"/>
    <offline-allowed/>
    <shortcut online="false">
      <desktop/>
      <menu submenu="eTeks Sweet Home 3D"/>
    </shortcut>
    <association extensions="sh3d sh3l sh3f sh3t sh3p" 
                 mime-type="application/SweetHome3D"/>
  </information>

Solution 3

We had the same problem. It worked fine initially then over time (a few Java updates?) it stopped working. When I got around to troubleshooting I discovered that even though javaws sends that it is gzip capable, our gzip response was not handled. I turned gzip off for these icons and it worked fine once again.

Solution 4

I don't have a specific answer I'm afraid, but Project MaiTai is an open source application written in JavaFX, and that has a custom desktop icon.

If you haven't done so already, maybe checking the JNLP code for MaiTai would give you some pointers.

Solution 5

There's an example of how to do this in the JavaFX in Action book, if you have access to that. You need to make sure the res/icon64x64.png file is actually downloadable from whatever site the app is hosted on, relative to the JNLP's location. Try loading it directly in a browser to ensure its available/valid.

Share:
13,488
mikewilliamson
Author by

mikewilliamson

I'm a full-stack developer who has been writing software professionally since 2009. I've done a lot of Ruby on Rails, but my current stack is React, Redux, Node.js, GraphQL and ArangoDB, with longing side-wards glances at Elixir. I run the Ottawa Graph meetup and am really interested in how graph databases can allow you to tackle complex data without complex code.

Updated on June 04, 2022

Comments

  • mikewilliamson
    mikewilliamson about 2 years

    I am trying to get a custom destop icon to be displayed for my app but for some reason no matter what I do the same default java icon shows up. I have tried everything I can think of and gone and compared my jnlp file with others whose icons seem to work ok. According to everything I have read the following should work fine. But of course, it doesn't:

    <information>
        <title>MikesApp</title>
        <vendor>Mike</vendor>
        <homepage href="http://www.mikesapp.com/"/>
        <description>Mikes App.</description>
        <icon kind="shortcut" href="res/icon64x64.png" width="64" height="64"/>
        <offline-allowed/>
        <shortcut>
            <desktop/>
        </shortcut>
    </information>
    

    Any ideas would be greatly appreciated.