【发布时间】:2018-11-22 10:44:09
【问题描述】:
在计算屏幕坐标时经常出现 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 类的实现?
请注意,我不是直接使用这个类,它是由框架使用的
【问题讨论】:
-
如果它可用,那么您可以修改框架,以便所有对损坏的核心 java 类的引用都将使用您正确的类.....但这是一个非常混乱的解决方案。
-
您是否碰巧探索了patch module content 选项?
-
thanks @nullpointer patch module 看起来很有趣,但我有一个使用 java 代理的解决方案。我确实注意到他们说 --patch-module 选项仅用于测试和调试。强烈建议不要在生产环境中使用它。但他们可能也会说我在用 java 代理做什么
-
--patch-module javafx.runtime=patch.jar是在此模块中覆盖类的正确方法。在这种情况下使用代理有点疯狂。顺便说一句:在这种情况下,在 JDK 8 中使用 ext 目录很脆弱,因为如果首先找到带有补丁的 JAR 文件,则它是随机的。
标签: java classloader java-10