JDK11 + Maven 开发 JavaFx

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

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

创建 Maven 项目

创建一个 quickstart 的 Maven 项目,然后我们自己去构建目录结构:

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.InvocationTargetExceptionat 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 methodat 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 @0x3f176ae0at 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.AppProcess 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相关推荐

  1. IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常

    IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常 参考文章: (1)IntelliJ IDEA的Maven项目 ...

  2. springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS

    springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS 参考文章: (1)springboot启动异常j ...

  3. Dubbo 启动报java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy

    1.## Dubbo 启动报java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy 2. Failed to subscribe ...

  4. mvn Fatal error compiling: java.lang.IllegalAccessError

    今天使用mvn 启动springboot 项目 显示 Fatal error compiling: java.lang.IllegalAccessError 原因是lombok 要与jdk版本一致 查 ...

  5. java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its supe

    java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its supe ...

  6. java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z

    做spring和mybaits整合时出现的错误,让这个问题困扰了一早上,通过查资料终于把这个问题解决了 具体问题描述: 1 java.lang.IllegalAccessError: org.apac ...

  7. scala调用java库_从scala调用java时的java.lang.IllegalAccessError – solutions / workarounds?...

    我正在使用 java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个 奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵 和逐元素乘法,逆矩阵和随机矩阵 除了用于获得矩阵尺寸 ...

  8. Tomcat发布Maven项目遇到异常:java.lang.OutOfMemoryError: PermGen space

    前言: 本问题出现在tomcat 7发布 web3.0Maven项目的时候出现. 问题阐述: 异常:java.lang.OutOfMemoryError:PermGen space 解决如下: 1.  ...

  9. MyEclipse 启动之 java.lang.RuntimeException: No application id has been

    found. 今天公司刚买来一台服务器,配置安装 java 开发环境的时候,MyEclipse 无法启动,查看日志文件之后,具体错误信息 如下: [java] view plaincopyprint? ...

最新文章

  1. 智能POS常见问题整理
  2. Elasticsearch 节点发现
  3. 【JAVA并发编程实战】1、对象的共享
  4. [原创]修改oracle 数据库默认时间格式
  5. java把map值放入vector_Thinking in java基础之集合框架
  6. Node.js:封装Node通用web容器
  7. FDDB和LFW到底是个啥?
  8. 高精度乘法+刘汝佳BigNumber高精度结构体
  9. 四大含金量高的算法证书考试
  10. Untracked Files Prevent Checkout (AndroidStudio切换分支报错)
  11. 红警conquer.mix文件
  12. java 正则 标点符号_js实现正则匹配中文标点符号的方法
  13. 视频编码中的I帧、P帧、B帧的概念和特点
  14. 《编码隐藏在计算机软硬件背后的语言》读感
  15. 卖衣服有什么引流产品?微商卖衣服引流推广?
  16. 基于遥感影像的变化检测数据集
  17. 编译原理知识点总结——从NFA到DFA的转化
  18. 读者10W了,怎能不送书感谢一下?
  19. 基于机智云的嵌入式系统应用开发—空调远程智能控制系统
  20. Codeforces Round #824 (Div. 2) C. Phase Shift

热门文章

  1. 现在很多人都在网上找富业
  2. 如果苹果公司允许其他手机厂商使用iOS系统,对苹果公司来说会有什么好处?
  3. Git的下载与安装(详细)
  4. Java-类型转换,String转Object和Object转String
  5. sql语句中case_SQL中的CASE语句
  6. 参数嗅探_SQL Server 2016参数嗅探
  7. dta乱码_DTA是自动化索引的出色工具
  8. sql azure 语法_如何:Azure中SQL Server文件快照备份
  9. oracle ola_Ola HallengrenSQL Server维护解决方案–索引和统计信息维护
  10. 【10.1】python中的GIL