如何从外部包资源导入 CSS 文件
How to import a CSS file from an external bundle resource
我正在尝试从另一个名为 cssBundle 的包中导入 OSGi 包资源 (名为 CSS 的文件 style.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 的情况下将其添加到我的场景中?
该异常意味着它找不到您的文件。您应该调查创建 CSS 文件的 URI。
URI uri = new URI("file:///C:/other/mydir/myfile.txt");
表示资源包资源的 URI 不能表示为文件。所以从 URI 创建文件的方法是不可能的。
您可以对捆绑资源执行的操作是为其获取 InputStream。因此,您可以使用它将流内容复制到临时文件夹中的文件,并将该文件提供给 scene.getStylesheets().add.
另一种方法可能是在您的包中为 resources.css 定义一个 Import-Package。这将使该文件在您的包的类路径中可用。所以也许 scene.getStylesheets().add("/resources/css") 然后会起作用。
我正在尝试从另一个名为 cssBundle 的包中导入 OSGi 包资源 (名为 CSS 的文件 style.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 的情况下将其添加到我的场景中?
该异常意味着它找不到您的文件。您应该调查创建 CSS 文件的 URI。
URI uri = new URI("file:///C:/other/mydir/myfile.txt");
表示资源包资源的 URI 不能表示为文件。所以从 URI 创建文件的方法是不可能的。
您可以对捆绑资源执行的操作是为其获取 InputStream。因此,您可以使用它将流内容复制到临时文件夹中的文件,并将该文件提供给 scene.getStylesheets().add.
另一种方法可能是在您的包中为 resources.css 定义一个 Import-Package。这将使该文件在您的包的类路径中可用。所以也许 scene.getStylesheets().add("/resources/css") 然后会起作用。