如何从外部捆绑资源导入CSS文件

计划我修订

我正在尝试从另一个名为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的情况下将其添加到我的场景中?

克里斯汀·施耐德(Christian Schneider)

从分发包重新设置资源的URI不能表示为文件。因此,无法从URI创建文件的方法。

您可以使用捆绑软件资源来获得一个InputStream。因此,您可以使用它来将流内容复制到temp文件夹中的文件中,并将该文件提供给scene.getStylesheets()。add。

另一种方法可能是在包中为resources.css定义一个Import-Package。这将使文件在捆绑包的类路径上可用。因此,也许scene.getStylesheets()。add(“ / resources / css”)将起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章