如何从Java 9中的其他模块添加到JavaFX Scene样式表?
问题描述:
我有两个JPMS模块:如何从Java 9中的其他模块添加到JavaFX Scene样式表?
- 模块-一个
- 模块-B
在模块-一个我有类似:
public class MyAppplication extends Application {
....
public static void addCss(String path) {
stage.getScene().getStylesheets().add(path);
}
}
在模块-B我有要添加到MyApplication
的CSS文件。如何在模块-B的代码中做到这一点?我无法理解如何从另一个模块传递路径。
我的意思是在模块-B:
...
MyApplication.addCss(???);
...
EDIT
在OSGi中我用下面的溶液中bundle-b
(假设,该模块-一个呈束状-a和模块-B呈束状-b):
String pathInBundleB = "com/foo/package-in-bundle-b/file.css"
Bundle bundleB = FrameworkUtil.getBundle(this.getClass()).getBundleContext().getBundle();
URL cssFileUrl = bundleB.getEntry(pathInBundleB);
MyApplication.addCss(cssFileUrl.toString());
答
我在@AlanBateman的帮助下找到了解决方案。
假设,即CSS文件中com/foo/some-package/file.css
我用模块-B下面的代码:
package com.foo.some-package;
public class SomeClass {
public void init() {
MyApplication.addCss(this.getClass().getResource("base.css").toString());
}
}
此外,在模块B的模块的信息,我有:
opens com.foo.some-package to module-a;
什么都有你到目前为止尝试过?用这个更新问题,请不要在没有调试或尝试的情况下发布问题。 – nullpointer
另请指明,这是不是类似于https://stackoverflow.com/questions/46369101/how-to-get-resourcebundle-from-another-module-in-java-9? – nullpointer
module-b可以访问自己的资源,因此module-b应该有一个公共方法,它将内部调用的结果返回给Class.getResource或Class.getResourceAsStream。 – VGR