web-dev-qa-db-ja.com

モジュールjavafx.controlsがJava9に見つかりません

modulea.jarmoduleb.jarの2つのファイルに2つのJPMSモジュールがあります。 Moduleaにはjavafx.controlsモジュールが必要です。これらのモジュールを新しいレイヤーで使用する必要があるので、次のようにします。

ModuleFinder Finder = ModuleFinder.of(modAPath, modBPath);
ModuleLayer parent = ModuleLayer.boot();
Configuration cf = parent.configuration().resolveAndBind(Finder, ModuleFinder.of(), new HashSet<>());
ClassLoader scl = ClassLoader.getSystemClassLoader();
ModuleLayer newLayer = parent.defineModulesWithOneLoader(cf, scl);

JDKモジュールは自動的にロードされると思いましたが、

Exception in thread "main" Java.lang.module.FindException: Module javafx.controls not found, required by modulea
    at Java.base/Java.lang.module.Resolver.findFail(Resolver.Java:889)
    at Java.base/Java.lang.module.Resolver.resolve(Resolver.Java:191)
    at Java.base/Java.lang.module.Resolver.bind(Resolver.Java:297)
    at Java.base/Java.lang.module.Configuration.resolveAndBind(Configuration.Java:428)
    at Java.base/Java.lang.module.Configuration.resolveAndBind(Configuration.Java:230)

同時に:Java --list-modulesを実行すると、出力は次のようになります。

...
javafx.base@9
javafx.controls@9
javafx.deploy@9
javafx.fxml@9
javafx.graphics@9
javafx.media@9
javafx.swing@9
javafx.web@9

それを修正する方法は?

6
Pavel_K

@AlanBatemanのコメントから:

javafx.controlsモジュールはデフォルトではロードされません。 --add-modules javafx.controlsを指定して実行すると、強制的にブートレイヤーに入れることができます。

注:Java 11で始まるJavaFXは、別のプロジェクトです。

0
Pavel_K