0

I'm getting the exception below logged to stderr when trying to use my own custom css in JavaFX 2.2 (from JDK 7 update 11). It's funny because the css is actually found and used in my application so the only thing wrong is the exception in the logs. I also load up other resources this way (images, fonts etc) and there are no exceptions logged in these cases.

I'm loading the css like this:

val cssResource = getClass.getResource("/com/openaf/browser/gui/resources/openaf.css").toExternalForm
println("CSS Resource:    " + cssResource)
println("")
scene.getStylesheets.add(cssResource)

and you can see from the output that it is found (and I'm not sure why in the exception it says **.bss but maybe that's felix doing some internal bundle renaming.

Does anyone know why this exception is being logged and/or how to get rid of it?

CSS Resource:    bundle://21.57:1/com/openaf/browser/gui/resources/openaf.css

java.io.IOException: Resource does not exist: bundle://21.57:1/com/openaf/browser/gui/resources/openaf.bss
java.io.IOException: Resource does not exist: bundle://21.57:1/com/openaf/browser/gui/resources/openaf.bss
at org.apache.felix.framework.URLHandlersBundleURLConnection.<init>(URLHandlersBundleURLConnection.java:136)
at org.apache.felix.framework.URLHandlersBundleStreamHandler.openConnection(URLHandlersBundleStreamHandler.java:64)
at java.net.URL.openConnection(URL.java:971)
at java.net.URL.openStream(URL.java:1037)
at com.sun.javafx.css.Stylesheet.loadBinary(Stylesheet.java:201)
at com.sun.javafx.css.StyleManager.loadStylesheetUnPrivileged(StyleManager.java:572)
at com.sun.javafx.css.StyleManager.loadStylesheet(StyleManager.java:411)
at com.sun.javafx.css.StyleManager.updateStylesheets(StyleManager.java:858)
at javafx.stage.Window.impl_visibleChanging(Window.java:818)
at javafx.stage.Stage.impl_visibleChanging(Stage.java:922)
at javafx.stage.Window$10.invalidated(Window.java:689)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:127)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:161)
at javafx.stage.Window.setShowing(Window.java:782)
at javafx.stage.Window.show(Window.java:797)
at javafx.stage.Stage.show(Stage.java:229)
at com.openaf.browser.gui.BrowserStageManager.createStage(BrowserStageManager.scala:64)
at com.openaf.browser.gui.BrowserStageManager.start(BrowserStageManager.scala:41)
at com.openaf.browser.gui.BrowserBundleActivator$$anonfun$startUp$2.apply$mcV$sp(BrowserBundleActivator.scala:32)
at com.openaf.browser.gui.utils.BrowserUtils$$anon$1.run(BrowserUtils.scala:48)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)
Boomah
  • 1,172
  • 13
  • 24

1 Answers1

1

Either convert your CSS files to the binary BSS format:

http://docs.oracle.com/javafx/2/deployment/packaging.htm#BABCACBD

or use "-Dbinary.css=false" when you run your application.

Also note that I've recently released an initial version of Drombler FX, a modular RCP for JavaFX based on OSGi and Maven (POM-first):

http://puces-blog.blogspot.ch/2012/12/drombler-fx-building-modular-javafx.html

http://wiki.drombler.org/GettingStarted

By default it uses Apache Felix as well. Maybe you find it useful.

Puce
  • 37,247
  • 13
  • 80
  • 152
  • Equinox-OSGi has no problems loading CSS-Files from a Bundle - is it possible that you Felix is not setting an URL-Resolver? – tomsontom Mar 03 '13 at 19:20
  • Thanks, using the -Dbinary.css=false flag works as expected. So does javafx try to load the binary and when it can't fall back to the text css? And by trying to load the binary felix can't find it so outputs the exception? – Boomah Mar 03 '13 at 19:48
  • tomsontom, I've not done anything special with a URL-Resolver - and also I'm loading other resources just fine. – Boomah Mar 03 '13 at 19:49