首页 > 解决方案 > How do I fix the controlsfx demo program to initialize class org.controlsfx.glyphfont.FontAwesome?

问题描述

The controlsfx JavaFX library has a demo program and some controls fail to run, such as List Selection View, or List Action View or BreadCrumbBar.

I re-tested this on a new Windows 10 PC, with JDK11 and Gradle 5.5 freshly installed. I downloaded the branch 9 .zip, verified that the module-info.java files are present, and entered

gradlew run

For the above mentioned examples, the console shows:

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: Could not initialize class org.controlsfx.glyphfont.FontAwesome
        at org.controlsfx.samples/org.controlsfx.samples.HelloListActionView.createActions(HelloListActionView.java:144)
        at org.controlsfx.samples/org.controlsfx.samples.HelloListActionView.getPanel(HelloListActionView.java:63)
        at org.controlsfx.fxsampler/fxsampler.SampleBase.buildSample(SampleBase.java:77)
        at org.controlsfx.fxsampler/fxsampler.FXSampler.buildSampleTabContent(FXSampler.java:397)
        at org.controlsfx.fxsampler/fxsampler.FXSampler.updateTab(FXSampler.java:305)
        at org.controlsfx.fxsampler/fxsampler.FXSampler.changeSample(FXSampler.java:296)
        at org.controlsfx.fxsampler/fxsampler.FXSampler.lambda$start$1(FXSampler.java:159)

JAVA_HOME is C:\Program Files\Java\jdk-11.0.3

gradle --version

------------------------------------------------------------
Gradle 5.5
------------------------------------------------------------

Build time:   2019-06-28 17:36:05 UTC
Revision:     83820928f3ada1a3a1dbd9a6c0d47eb3f199378f

Kotlin:       1.3.31
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM:          11.0.3 (Oracle Corporation 11.0.3+12-LTS)
OS:           Windows 10 10.0 amd64

I'd like to take advantage of FontAwesome as well as the above mentioned controls.

I experimented with JDK 11, 11.0.1, 11.0.2, 11.0.2 Gradle 5.2, 5.5 Command line IntelliJ Another PC I usually develop on

标签: javafxfont-awesomecontrolsfx

解决方案


ControlsFX has a large number of external dependencies which are handled in the build.gradle file.

If your project does not use gradle to build the library, but instead it imports a .jar of it, then you should add all those options to the VM. To do that in IntelliJ, go to Edit Configuration, there you can find a VM options field.

You can try to copy and paste these options:

--add-exports=javafx.graphics/com.sun.javafx.scene=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.css=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control.inputmap=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.collections=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.runtime=org.controlsfx.controls --add-exports=javafx.web/com.sun.webkit=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.css=org.controlsfx.controls

This worked for me. I was facing the same issue with ControlsFX 11.0, while using ListSelectionView.


推荐阅读