Module javafx.controls not found in Java 9

坚强是说给别人听的谎言 提交于 2019-12-04 01:20:59

问题


I have two JPMS module in two files: modulea.jar and moduleb.jar. Modulea requires javafx.controls module. I need to use these modules in new layer, so I do:

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);

I thought that JDK modules will be loaded automatically but I get

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)

At the same time when I do: java --list-modules, the output is:

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

How to fix it?


回答1:


From @AlanBateman's comment:

The javafx.controls module is not loaded by default. You can force it into the boot layer by running with --add-modules javafx.controls.

NOTE: Starting with Java 11 JavaFX is a separate project.



来源:https://stackoverflow.com/questions/46349773/module-javafx-controls-not-found-in-java-9

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!