如何从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()); 
+0

什么都有你到目前为止尝试过?用这个更新问题,请不要在没有调试或尝试的情况下发布问题。 – nullpointer

+1

另请指明,这是不是类似于https://*.com/questions/46369101/how-to-get-resourcebundle-from-another-module-in-java-9? – nullpointer

+0

module-b可以访问自己的资源,因此module-b应该有一个公共方法,它将内部调用的结果返回给Class.getResource或Class.getResourceAsStream。 – VGR

我在@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;