Skip to content

Resolving IllegalAccessError in JavaFX Applications Using Maven Plugin

Resolving IllegalAccessError in JavaFX Applications Using Maven Plugin

Developers working with JavaFX and third-party libraries such as ControlsFX might encounter an IllegalAccessError when running their application. This error typically occurs because Java’s module system restricts access to internal APIs, which can cause compatibility issues between JavaFX modules and libraries that rely on internal classes. The specific error encountered might look like this:
Caused by: java.lang.IllegalAccessError: class org.controlsfx.control.textfield.AutoCompletionBinding (in module org.controlsfx.controls) cannot access class com.sun.javafx.event.EventHandlerManager (in module javafx.base) because module javafx.base does not export com.sun.javafx.event to module org.controlsfx.controls
This error indicates that ControlsFX is trying to access a class in javafx.base that is not exported to it, causing the access violation.

Solution

To resolve this issue when using the Maven javafx-maven-plugin to run your JavaFX application, you can configure the plugin to include the necessary --add-exports JVM argument. This argument allows specific packages in the javafx.base module to be exported to ControlsFX, resolving the access issue. Here is how you can configure the javafx-maven-plugin to fix the problem:

1. Update pom.xml Configuration

Add the javafx-maven-plugin to your pom.xml with the appropriate configuration to export the required packages. Below is an example configuration:
<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.4</version>
    <configuration>
        <mainClass>some.package.App</mainClass>
        <options>
            <option>--add-exports</option>
            <option>javafx.base/com.sun.javafx.event=org.controlsfx.controls</option>
        </options>
    </configuration>
</plugin>
Replace some.package.App with the fully qualified name of your main application class.

2. Build and Run the Application

After updating the pom.xml, rebuild and run your application using Maven:
mvn clean javafx:run
This command will use the javafx-maven-plugin to run your application with the specified JVM arguments.

Explanation

The --add-exports JVM argument modifies the module system to allow ControlsFX access to the internal com.sun.javafx.event package within the javafx.base module. This is necessary because ControlsFX relies on this internal API to function correctly. By configuring the javafx-maven-plugin with this argument, you ensure that your application can run without encountering IllegalAccessError.

Conclusion

Configuring the javafx-maven-plugin with the --add-exports argument is an effective way to resolve IllegalAccessError issues in JavaFX applications that use third-party libraries like ControlsFX. This solution ensures proper module access and compatibility, allowing you to run your JavaFX applications smoothly.

Leave a Reply

Discover more from Sowft | Transforming Ideas into Digital Success

Subscribe now to keep reading and get access to the full archive.

Continue reading