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类的实现?
请注意,我没有直接使用此类,它由框架
使用答案 0 :(得分:1)
根据这个问题看起来像使用java代理可以找到解决方案
Replace a class within the Java class library with a custom version
答案 1 :(得分:1)
我需要这样做,但是我是通过JNI接口(而不是命令行)从C启动Java的。只是将命令行args转换为JavaVMOptions无效。相反,它们全部以一个arg的形式进入,如下:
JavaVMOption options[N_ARGS] = { 0 };
options[0].optionString = "--patch-module=javafx.runtime=patch.jar";
花了很多时间才能弄清楚这一点,因此希望它可以节省一些时间。
答案 2 :(得分:0)
Alan再一次给出a comment的最佳答案。 :)引用:
--patch-module javafx.runtime=patch.jar
是覆盖此模块中的类的正确方法
如果您需要"覆盖"在平台模块中的类,使用--patch-module
来执行此操作。如果这拖入其他依赖项,请确保使用--add-reads
使其可读。