区块链技术博客
www.b2bchain.cn

JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper

这篇文章主要介绍了JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper的讲解,通过具体代码实例进行23741 讲解,并且分析了JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=23741

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

JDK11 + Maven 开发 JavaFx

  • 创建 Maven 项目
  • 引入依赖
  • 尝试启动(失败)
  • 遇到问题
    • 解决方案

旧电脑上 JDK8 开发 JavaFx 项目就很舒服欸,JDK11 不内置 JavaFx 了,通过 Maven 进行开发遇到的问题还挺多的。。。。

创建 Maven 项目

创建一个 quickstart 的 Maven 项目,然后我们自己去构建目录结构:
JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper
App 和 Controller 都是 常规类,Launcher 主要是为了解决一个启动异常的问题

引入依赖

<dependency>     <groupId>org.openjfx</groupId>     <artifactId>javafx-controls</artifactId>     <version>11</version> </dependency> <dependency>     <groupId>org.openjfx</groupId>     <artifactId>javafx-fxml</artifactId>     <version>11</version> </dependency> 

尝试启动(失败)

用 fxml 随便搭个界面,正常启动应该都是这样的:

package com.yusael;  import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage;  public class App extends javafx.application.Application {      public static void main(String[] args) {         launch(args);     }      public void start(Stage primaryStage) throws Exception {         Parent root = FXMLLoader.load(getClass().getResource("/main.fxml"));         primaryStage.setTitle("My Application");         primaryStage.setScene(new Scene(root, 600, 400));         primaryStage.show();      } } 

居然失败了。。。。。。

遇到问题

这个问题是使用 fxml 开发才会遇到的,利用 java 代码写界面是没有问题的。

Exception in Application start method java.lang.reflect.InvocationTargetException 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.base/java.lang.reflect.Method.invoke(Method.java:566) 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464) 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363) 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.base/java.lang.reflect.Method.invoke(Method.java:566) 	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051) Caused by: java.lang.RuntimeException: Exception in Application start method 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900) 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) 	at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x3f176ae0) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x3f176ae0 	at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38) 	at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056) 	at com.yusael.App.start(App.java:47) 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) 	at java.base/java.security.AccessController.doPrivileged(Native Method) 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) 	at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) 	at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 	at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) 	... 1 more Exception running application com.yusael.App  Process finished with exit code 1 

解决方案

将 App 中的 main 方法抽取到另一个类中,通过以下方式启动:

Application.launch(App.class, args); 

具体如下:

package com.yusael;  import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage;  public class App extends javafx.application.Application {      public void start(Stage primaryStage) throws Exception {         Parent root = FXMLLoader.load(getClass().getResource("/main.fxml"));         primaryStage.setTitle("My Application");         primaryStage.setScene(new Scene(root, 600, 400));         primaryStage.show();     } } 
package com.yusael;  import javafx.application.Application;  public class Launcher {     public static void main(String args[]){         Application.launch(App.class, args);     } } 

本文转自互联网,侵权联系删除JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » JDK11+Maven开发JavaFx启动问题:java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们