2013-03-03 2 views
0

Я получаю исключение ниже при регистрации в stderr при попытке использовать собственный CSS-код в JavaFX 2.2 (из JDK 7 update 11). Это забавно, потому что css действительно найден и используется в моем приложении, поэтому единственное, что неправильно, - это исключение в журналах. Я также загружаю другие ресурсы таким образом (изображения, шрифты и т. Д.), И в этих случаях нет исключений.Исключение, зарегистрированное при использовании пользовательского css в JavaFX в Felix OSGI

Я загрузка CSS так:

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

и вы можете видеть из вывода, что он находится (и я не знаю, почему в исключении он говорит * * .bss но, возможно, что это Феликс делать некоторое внутреннее расслоение переименовывать.

кто-нибудь знает, почему это исключение в настоящее время регистрируется и/или как избавиться от него?

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) 

ответ

1

Либо конвертировать CSS файлы в двоичном формате BSS:

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

или использовать «-Dbinary.css = ложь» при запуске приложения.

отметить также, что я недавно выпустил первоначальную версию Drombler FX, модульный RCP для JavaFX на основе OSGi и Maven (П-первых):

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

http://wiki.drombler.org/GettingStarted

По По умолчанию он использует Apache Felix. Может быть, вы сочтете это полезным.

+0

У Equinox-OSGi нет проблем с загрузкой CSS-файлов из Bundle - возможно ли, что вы Felix не устанавливаете URL-Resolver? – tomsontom

+0

Спасибо, используя флаг -Dbinary.css = false работает, как ожидалось. Так javafx пытается загрузить двоичный файл и когда он не может вернуться к тексту css? И, пытаясь загрузить двоичный файл felix, он не может найти его, поэтому выводит исключение? – Boomah

+0

tomsontom, я не сделал ничего особенного с помощью URL-Resolver, а также просто загружаю другие ресурсы. – Boomah

Смежные вопросы