我正在尝试从另一个名为cssBundle的捆绑包中导入OSGi捆绑包资源(一个名为style.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的情况下将其添加到我的场景中?
从分发包重新设置资源的URI不能表示为文件。因此,无法从URI创建文件的方法。
您可以使用捆绑软件资源来获得一个InputStream。因此,您可以使用它来将流内容复制到temp文件夹中的文件中,并将该文件提供给scene.getStylesheets()。add。
另一种方法可能是在包中为resources.css定义一个Import-Package。这将使文件在捆绑包的类路径上可用。因此,也许scene.getStylesheets()。add(“ / resources / css”)将起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句