如何从Java 9中的另一个模块添加到JavaFX Scene样式表?

时间:2017-09-22 18:44:17

标签: java javafx java-9 java-module javafx-9

我有两个JPMS模块:

  • module-a
  • 模块-B

在模块-a中我有类似的东西:

public class MyAppplication extends Application {
   ....
   public static void addCss(String path) {
       stage.getScene().getStylesheets().add(path);
   }
}

在module-b中我有CSS文件,我想添加到MyApplication。如何在module-b中的代码中执行此操作?我无法理解如何从另一个模块传递路径。

我的意思是在模块-b中:

...
MyApplication.addCss(???);
...

修改
在OSGi中,我在bundle-b中使用了以下解决方案(假设,该模块-a是bundle-a,而module-b是bundle-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());

2 个答案:

答案 0 :(得分:1)

我在@AlanBateman的帮助下找到了解决方案。

假设css文件在com/foo/some-package/file.css中,我在module-b中使用以下代码:

package com.foo.some-package;

public class SomeClass {

  public void init() {
      MyApplication.addCss(this.getClass().getResource("base.css").toString());
  }
}

此外,在module-b的module-info中我有:

opens com.foo.some-package to module-a;

答案 1 :(得分:0)

package org.apis.style.css;

public class CommonCss {

    public static String getCommonCssStyle(){
       return CommonCss.class.getClassLoader().getResource("common.css").toExternalForm();
    }
}

将此软件包导出给所有人。

在其他模块中,我添加

getStylesheets().add(CommonCss.getCommonCssStyle());