JavaFX实例化SwingNode时抛出IllegalAccessError异常求助
JavaFX实例化SwingNode时抛出IllegalAccessError异常求助
大家好,我最近在开发一个新的JavaFX项目,需要整合现有的Swing控制面板。但当我尝试执行new SwingNode()时,直接抛出了IllegalAccessError异常,折腾了好久都没解决,来向大家求助!
异常详情
Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.embed.swing.SwingNodeHelper (in unnamed module @0x35dc99d5) cannot access class com.sun.javafx.scene.NodeHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene to unnamed module @0x35dc99d5 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at javafx.embed.swing.SwingNode.<clinit>(SwingNode.java:135) at test.app.MJFXtest.start(MJFXtest.java:11)
我使用的是JavaFX 21版本,也试过19版本,但问题完全一样。
测试代码
我写了一个极简的测试类来复现问题:
package test.app; import javafx.application.Application; import javafx.stage.Stage; import javafx.embed.swing.SwingNode; public class MJFXtest extends Application { @Override public void start(Stage primaryStage) { SwingNode sn = new SwingNode(); } public static void main(String[] args) { launch(args); } }
环境配置
Maven依赖(pom.xml完整内容)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bobandthomas.morbid</groupId> <artifactId>morbid</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-swing</artifactId> <version>21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>21</version> </dependency> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx</artifactId> <version>21</version> <type>pom</type> </dependency> <!-- https://mvnrepository.com/artifact/javax.vecmath/vecmath --> <dependency> <groupId>javax.vecmath</groupId> <artifactId>vecmath</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>toxi</groupId> <artifactId>geom</artifactId> <version>0021</version> <scope>system</scope> <systemPath>D:\Thomas\toxiclibs\toxiclibscore.jar</systemPath> </dependency> <dependency> <groupId>toxi</groupId> <artifactId>volume</artifactId> <version>0021</version> <scope>system</scope> <systemPath>D:\Thomas\toxiclibs\volumeutils.jar</systemPath> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.6</version> <executions> <execution> <!-- Default configuration for running --> <!-- Usage: mvn clean javafx:run --> <id>default-cli</id> <configuration> <mainClass>com.bobandthomas.morbid.App</mainClass> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <argLine> --add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED </argLine> </configuration> </plugin> </plugins> </build> </project>
完整运行命令行
d:; cd 'd:\Thomas\Dropbox\Projects\morbid'; & 'C:\Program Files\Java\jdk-21\bin\java.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:51624' '@C:\Users\Thomas\AppData\Local\Temp\cp_a1x3p1tfjwls6nptiscdinmdj.argfile' 'com.bobandthomas.morbid.MorbidJFX'
已尝试的解决步骤
我之前看到过类似的问题,确认已经在pom.xml中引入了javafx-swing依赖,但问题依然存在。
期望结果
我希望能够正常创建SwingNode实例,而不是在执行new SwingNode()时抛出异常。
非常感谢大家的帮助!
备注:内容来源于stack exchange,提问作者Thomas Kreek
相关产品推荐
相关产品推荐

