-->

including an icon into a self-contained JavaFX app

2019-01-09 04:06发布

问题:

Followed the instructions here and here. I am using JDK 7u9 and NetBeans 7.2.1. What I did was create the whole path relative to my project's root folder (C:\Users\Administrator\Desktop\icotest\package\windows\icotest.ico). I tried both with a 48x48 and a 256x256 size. Here's a tree overview for my project called icotest:

│   build.xml
│   manifest.mf
│
├───build
│   │   built-jar.properties
│   │
│   ├───classes
│   │   └───icotest
│   │           Main$1.class
│   │           Main.class
│   │
│   ├───empty
│   └───generated-sources
│       └───ap-source-output
├───dist
│   │   icotest.html
│   │   icotest.jar
│   │   icotest.jnlp
│   │
│   └───web-files
│           dtjava.js
│           error.png
│           get_java.png
│           get_javafx.png
│           javafx-chrome.png
│           javafx-loading-100x100.gif
│           javafx-loading-25x25.gif
│           upgrade_java.png
│           upgrade_javafx.png
│
├───nbproject
│   │   build-impl.xml
│   │   genfiles.properties
│   │   jfx-impl.xml
│   │   project.properties
│   │   project.xml
│   │
│   ├───configs
│   │       Run_as_WebStart.properties
│   │       Run_in_Browser.properties
│   │
│   └───private
│       │   private.properties
│       │   private.xml
│       │
│       └───configs
│               Run_as_WebStart.properties
│               Run_in_Browser.properties
│
├───package
│   └───windows
│           icotest.ico
│
└───src
    └───icotest
            Main.java

This is what build.xml looks like:

<target name="-post-jfx-deploy">
    <fx:deploy verbose="true" nativeBundles="exe" outdir="${basedir}/${dist.dir}" outfile="${application.title}">
        <fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
        <fx:resources>
            <fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
            <fx:fileset dir="${basedir}/${dist.dir}" includes="lib/*.jar"/>
        </fx:resources>
        <fx:info title="${application.title}" vendor="${application.vendor}"/>
        <fx:preferences shortcut="true"/>
    </fx:deploy>
</target>

No matter what I do - I still get this message during the dist build process (that activates ISS) with the debug flag set to true in the according build.xml file: "Using default package resource [application icon] (add package/windows/icotest.ico to the class path to customize)"

Any idea what I might be doing wrong? Thank you.

回答1:

After trial and error and using XXL answer i post a more clear way of adding your custom icon into a JavaFX self contained. By the way am using Netbeans 7.3 JDK 1.7u17 1. Begin with creating a folder named package inside the folder(has the same name as your project) found in your project src directory.

2. under the folder package, create the folder windows and this is where you will place your custom icon.please ensure the name of your .ico file is the same as the application name Note: this could have easily be done in netbeans by creating a new package but for some reason, netbeans does not allow your to name a new package 'package'

  1. Next your add the directory containing /package/windows/.ico to Ant clathpath properties
  2. Clean & Build your project and the final output will look something like this with your custom icon


回答2:

Found the answer here. It appears that the guidelines posted on the Oracle's website are currently mismatching the actual deployment scenarios available. Namely, when dealing with NetBeans, ant is unaware of the current directory that is presumed to be your root project. As it has been suggested in the according forum thread - simply add the directory containing "package/windows/${projectname}.ico" to ant's classpath and it will pick up the relevant resource, even though the tutorial claims that this should happen automatically due to the existing (?) addition of '.' to the build script.