首页 > 解决方案 > 修补或覆盖核心 Java 10 类的实现

问题描述

JFX 中有一个错误,在计算屏幕坐标时经常出现 https://bugs.openjdk.java.net/browse/JDK-8194727https://bugs.openjdk.java.net/browse/JDK-8190400

我已将问题追溯到 GeneralTransform3D 的实现,它是 javajfx 运行时的一部分。

我已经向 Oracle 提交了错误报告,但在它被接受、修复并发布之前,我需要一种修复我的应用程序的方法。

在 java 8 中,我能够创建一个包含该类的固定版本的 jar,并将其安装在 lib/ext 文件夹中。这似乎可行,并且 JFX 实现使用了我自己的 impl。

在 java 10 中,扩展机制已被删除。将补丁 jar 添加到类路径中不起作用,因为在类加载过程中为时已晚。

有没有办法覆盖/修补 Java 10 中核心 Java 类的实现?

请注意,我没有直接使用这个类,它是由框架使用的

标签: javaclassloaderjava-10

解决方案


艾伦再次给出了最佳答案作为评论。:) 引用:

--patch-module javafx.runtime=patch.jar是覆盖此模块中的类的正确方法

如果您需要“覆盖”平台模块中的类,请使用--patch-module它。如果这会拖累额外的依赖项,请确保使用--add-reads.


推荐阅读