JFX中存在一个bug,在计算屏幕协调https://bugs.openjdk.java.net/browse/JDK-8194727和https://bugs.openjdk.java.net/browse/JDK-8190400时经常会出现这种缺陷。
我一直在跟踪这个问题,直到GeneralTransform3D的实现,这是javajfx运行时的一部分。
我已经向Oracle提交了一个bug报告,但在它被接受、修复并发布之前,我需要一种修复我的应用程序的方法。
在java 8中,我能够创建一个包含这个类的固定版本的jar,并将其安装在lib/ext文件夹中。这似乎是可行的,JFX实现使用了我对自己的推动。
在java 10中,扩展机制已被删除。将补丁jar添加到类路径不起作用,因为在类加载过程中为时已晚。
是否有一种方法可以覆盖/修补java 10中核心Java类的实现?
注意,我不是直接使用这个类,而是由框架使用
发布于 2018-06-17 18:05:20
再一次,Alan给出了a comment最好的答案。*引用:
--patch-module javafx.runtime=patch.jar是覆盖此模块中类的正确方法。
如果您需要“覆盖”平台模块中的类,请使用--patch-module进行此操作。如果这需要额外的依赖项,请确保使用--add-reads读取它们。
发布于 2019-09-17 20:59:51
我需要这样做,但我是通过JNI接口(而不是命令行)从C启动Java的。仅仅将命令行args转换到JavaVMOptions上就不起作用了。相反,这一切都在一个arg中进行,如下所示:
JavaVMOption options[N_ARGS] = { 0 };
options[0].optionString = "--patch-module=javafx.runtime=patch.jar";花了很长时间才弄清楚这件事,所以希望它能节省别人的时间。
发布于 2018-06-13 01:44:31
根据这个问题,使用java代理解决方案是可能的。
Replace a class within the Java class library with a custom version
https://stackoverflow.com/questions/50827263
复制相似问题