JI-9056801 : Scene: Allow to add a stylesheet using a typed URL, not a stringified URL

Nir Lisker nlisker at gmail.com
Fri Sep 14 12:22:38 UTC 2018

Hi Michael,

The issue in the JBS is JDK-8209921 [1].

getStylesheets() returns an ObservableList<String>, it cannot be changed to
ObservableList<URL>. What solution do you propose?

[1] https://bugs.openjdk.java.net/browse/JDK-8209921

- Nir

On Wed, Aug 22, 2018 at 9:47 PM Michael Binz <michab66 at gmail.com> wrote:

> Hi all,
> I opened a proposal for an extension of the javafx.scene.Scene API to allow
> to add a stylesheet using a typed java.net.URL.
> Currently the Scene class offers a list of stylesheet URLs in their
> stringified representation accessible by Scene.getStylesheets().
> The problem is that in some cases an URL instance encapsulates internal
> state that gets lost in the conversion into its external form and back into
> an URL instance, namely information on an URL handler. This ultimately
> results in a failure (IOException file not found) when the Screen class
> tries to load a stylesheet though code that loads the file contents using
> URL#openStream() on the original URL instance can read the file contents
> successfully.
> In my case the problem showed up when creating an executable jar file
> containing my JavaFX application (using OneJar).  The application startup
> in this case installs a customized Classloader that implements special
> logic for accessing the jars contained classes,  This works transparently
> for classes and resources, but the URLs returned by Class#getResource( name
> ) do not survive the conversion to string and back because of the described
> reason.
> There is a workaround that caches the resource in a temporary file and
> passes this file's URL to the Scene's list of stylesheets, but this poses
> other problems.
> As a remark, other APIs in JavaFX use the same pattern of expecting
> stringified URLs like the Image() constructor and have the same problem,
> but offer alternative constructors accepting a stream which allows to solve
> the problem nicely.
> Please discuss and decide if the proposal can be added as a change request
> for JavaFX.
> Best wishes,
> Michael.

More information about the openjfx-dev mailing list