Исправить или переопределить реализацию основного класса Java 10

В JFX есть ошибка, которая часто проявляется при вычислении координаты экрана https://bugs.openjdk.java.net/browse/JDK-8194727 и https://bugs.openjdk.java.net/browse/JDK-8190400

Я отследил проблему до реализации GeneralTransform3D, которая является частью среды выполнения javajfx.

Я отправил отчет об ошибках в Oracle, но пока он не будет принят, исправлен и не будет выпущен, мне нужен способ исправления моего приложения.

В java 8 я смог создать банку с фиксированной версией класса и установить ее в папку lib/ext. Это, казалось, сработало, и реализация JFX использовала мой impl свой.

В java 10 механизм расширения был удален. Добавление патча-патча в путь к классам не работает, поскольку слишком поздно в процессе загрузки классов.

Есть ли способ переопределить/исправить реализацию основных классов Java в Java 10?

Обратите внимание, что я не использую этот класс напрямую, он используется инфраструктурой

Ответы

Ответ 1

Еще раз, Алан дает лучший ответ в качестве комментария. :) Цитата:

--patch-module javafx.runtime=patch.jar - это правильный способ переопределить классы в этом модуле

Если вам нужно "переопределить" класс в модуле платформы, для этого используйте --patch-module. Если это затягивает дополнительные зависимости, убедитесь, что они читаются с помощью --add-reads.

Ответ 3

Мне нужно было сделать это, но я запускал Java из C через интерфейс JNI (вместо командной строки). Простое перемещение аргументов командной строки в JavaVMOptions не сработало. Вместо этого все идет в одном аргументе следующим образом:

JavaVMOption options[N_ARGS] = { 0 };
options[0].optionString = "--patch-module=javafx.runtime=patch.jar";

Чтобы понять это, потребовалось немало усилий, так что надеюсь, что это сэкономит кому-то еще время.