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 <micha...@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. >