我試圖從名爲cssBundle另一束導入OSGi包資源(稱爲style.css的CSS文件)導入CSS文件:如何從外部束資源
public void addCSS() {
Bundle bundle = FrameworkUtil.getBundle(this.getClass());
Bundle[] bArray = bundle.getBundleContext().getBundles();
Bundle cssBundle = null;
for (Bundle b : bArray) {
if (b.getSymbolicName().equals("cssBundle")) {
cssBundle = b;
break;
}
}
Enumeration<URL> resources = null;
try {
resources = cssBundle.getResources("/resources/css/mainscreen.css");
} catch (IOException e) {
e.printStackTrace();
}
if (resources != null) {
URL myCSSURL = resources.nextElement();
try {
URI uri = myCSSURL.toURI();
File f = new File(uri);
scene.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
然而,這樣,我得到:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: URI scheme is not "file"
at java.io.File.<init>(Unknown Source)
什麼是正確的或更好的方式去了解它?
System.out.println(myCSSURL);
產出
bundle://13.1:1/resources/css/style.css
有沒有一種方法,我可以不使用URL到我的場景中添加呢?
我沒有使用過OSGI,但是有沒有一個原因,你不會只是'scene.getStylesheets()。add(uri.toString());'? (或者'uri.toURL()。toExternalForm()')'stylesheets'屬性是URL的字符串表示形式的列表,畢竟... –
@James_D我從不同的bundle資源導入CSS資源文件。 –
我真的不覺得那很重要。如果你調用'uri.toString()',你實際上得到了什麼?它大概是一個jar文件中的條目,並且URI將指示jar文件。 –