修补或覆盖核心Java 10类的实现

JFX中存在一个错误,通常在计算屏幕坐标时显示出来https://bugs.openjdk.java.net/browse/JDK-8194727和https://bugs.openjdk.java.net/browse/JDK-8190400

我已将问题跟踪到GeneralTransform3D的实现,这是javajfx运行时的一部分。

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

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

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

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

请注意,我没有直接使用此类,它由框架使用

艾伦再一次给出了最佳答案作为评论 。 🙂 Quote:

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

如果您需要“覆盖”平台模块中的类,请使用--patch-module来执行此操作。 如果拖入其他依赖项,请确保使用--add-reads使它们可读。

根据这个问题,看起来可以使用java代理解决方案

用自定义版本替换Java类库中的类