java.lang.ClassNotFoundException: javafx.util.Pair的问题解决与原因详解

先说解决办法:

1、引入依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.12</version>
</dependency>

2、更换代码依赖地址:

原来依赖地址:
import javafx.util.Pair;

新的依赖地址:
import cn.hutool.core.lang.Pair;

即可

问题出现的原因

首先我们看一下我们之前依赖的jar在哪里,在项目中可以看到
在这里插入图片描述
上面写的很清楚了,是jdk1.8中的jar。
你的jdk大概率是从Oracle家下载的。那么需要知道,你服务器的jdk是谁家的。
既然包这个错,大概率是OpenJDK了。
在这里插入图片描述

两个JDK的区别

在这里插入图片描述

两者区别:

开源性质:
OpenJDK是开源的,由Java社区共同开发和维护,而OracleJDK是由Oracle公司开发和提供的商业版本。

许可证:
OpenJDK采用GNU通用公共许可证(GPL)进行授权,而OracleJDK则采用Oracle Binary Code License Agreement(BCLA)进行授权。

更新和支持:
OpenJDK的更新和支持由Java社区负责,而OracleJDK则由Oracle公司提供商业支持和更新。

功能差异:
在功能上,OpenJDK和OracleJDK的核心功能是相同的,但OracleJDK可能会包含一些额外的商业功能和工具。

默认安装:
一些Linux发行版默认安装的是OpenJDK,而不是OracleJDK。

用哪个看取舍。
不过,OracleJDK开始商用,如果不想出现商业冲突,还是避免在生产环境使用OracleJDK。

这就是原因

END

### 关于 `java.lang.ClassNotFoundException` 和 `javafx.util.Pair` 当遇到 `java.lang.ClassNotFoundException: javafx.util.Pair` 时,这表明运行环境无法找到所需的类文件。此问题可能源于模块化系统的变更或依赖未正确配置。 #### 原因分析 1. **JavaFX 模块缺失** 自 JDK 11 起,JavaFX 不再作为标准库的一部分提供[^3]。因此,在使用 JavaFX 类(如 `javafx.util.Pair`)时,必须单独引入 JavaFX 模块。 2. **项目构建工具配置错误** 如果使用 Maven 或 Gradle 构建项目,则需要确保正确添加了 JavaFX 的依赖项。如果这些依赖未被正确声明,编译器将无法识别所需类[^5]。 3. **运行时环境不支持 JavaFX** 即使在开发环境中一切正常,但如果目标运行环境缺乏必要的 JavaFX 支持,仍会出现此类异常。 --- ### 解决方案 以下是针对上述问题的具体解决方案: #### 方法一:引入 Hutool 工具包替代 可以考虑使用第三方工具包来代替原生的 `javafx.util.Pair`。Hutool 提供了一个类似的实现,能够满足大多数需求。 ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.12</version> </dependency> ``` 通过这种方式,可以用 Hutool 的功能替换掉对 JavaFX 的依赖。 #### 方法二:手动导入 JavaFX SDK 对于某些场景,可以直接下载并配置完整的 JavaFX SDK 到项目中。步骤如下: - 下载最新版本的 OpenJDK 和 OpenJFX; - 配置模块路径(Module Path),而非传统意义上的 Classpath; - 使用命令行参数指定模块位置,例如: ```bash --module-path /path/to/javafx-sdk/lib --add-modules=javafx.controls,javafx.fxml ``` 这种方法适用于希望继续沿用 JavaFX 功能的情况。 #### 方法三:调整 POM 文件以包含必要依赖 如果是基于 Maven 的项目结构,可以通过增加以下片段完成设置: ```xml <!-- 添加 JavaFX 控制台 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17</version> <!-- 版本号视实际需求而定 --> </dependency> <!-- 可选 - 若需额外组件 --> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>17</version> </dependency> ``` 注意更新 `<version>` 字段到兼容的目标版本上。 #### 方法四:验证运行平台的支持情况 确认部署服务器或者客户端机器已安装适当版本的 JRE/JDK 并启用了 JavaFX 支撑能力。否则即使源码无误也可能触发同样的错误提示信息。 --- ### 总结 综上所述,要彻底消除 `ClassNotFoundException: javafx.util.Pair` 这样的警告消息,要么切换成其他框架下的相似对象定义形式;要么重新规划整个工程架构使之适应现代分离式的生态系统布局模式——即显式声明所使用的外部资源集合列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

槐序二十四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值