Самый простой способ подавления предупреждений о версии FXML без изменения версии Java - PullRequest
0 голосов
/ 20 декабря 2018

Сводка

Мы разрабатываем FXML с помощью Scene Builder 10 и загружаем его в приложение с JRE 8. Мы уверены, что наш FXML полностью совместим с Java 8, но хотели бы исключить следующие предупреждения, которыепечатается всякий раз, когда загружается файл FXML:

Dec 19, 2018 12:50:14 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 10.0.1 by JavaFX runtime of version 8.0.192

Мы думали о множестве решений, но ни одно из них не кажется очень хорошим.Я просто хочу знать, может ли кто-нибудь придумать что-нибудь лучше.

Обратите внимание, что есть несколько вопросов по SO, которые кажутся очень похожими на это, но до сих пор кажется, что все они были решены путем простого обновления доболее новая версия JRE, которая для нас недоступна.

Справочная информация

Наши приложения поставляются различным клиентам, некоторые из которых не хотят обновлять JRE 8. Оказывается, SceneBuilder для java 10 намного быстрее, чем Scene Builder для Java 8 (не знаю почему).В результате мы хотели бы продолжать использовать Scene Builder для Java 10, но мы всегда пишем наш код для совместимости с Java 8, и мы всегда проводим все наши тесты с JRE 8.

Обходные пути

Существует множество обходных путей, о которых мы подумали, но все они кажутся немного надуманными и определенно больше похожи на обходные пути, чем на истинные решения.То, что я действительно хотел бы видеть, это либо способ указать Scene Builder использовать более старую версию API, либо указать загрузчику FXML игнорировать номер версии.Похоже, что это, вероятно, невозможно.

Вручную измените номер версии в FXML

Нетрудно просто изменить атрибут xmlns="http://javafx.com/javafx/10.0.1" на xmlns="http://javafx.com/javafx/8.0.192", но он обновляется каждый раз, когда выизмените его в Scene Builder, и вам тяжело постоянно его менять.Я думал о создании git-хука для автоматического выполнения при коммите, но мы используем Eclipse, и интеграция egit-хука практически отсутствует.

Перенаправление Stderr при загрузке FXML

Мы могли бысоздайте утилиту FXMLLoading, которую мы используем для всей загрузки FXML.Он мог бы по существу отключить stderr перед загрузкой, а затем снова включить его.Это не будет потокобезопасным, хотя и все, что может быть одновременно напечатано на stderr, будет потеряно.

Мы также можем перенаправить stderr на объект, который определяет, что должно быть напечатано на основе текущего запущенного потока.или, возможно, просто пропустив текст, который соответствует предупреждению FXML, которое мы видим.Это все еще кажется хакерским.

Используйте пользовательский поток ввода для загрузки FXML

Мы могли бы создать утилиту загрузки FXML, которая использует load(InputStream) и передать ее впользовательский InputStream, который отфильтровывает или изменяет этот атрибут xmlns.Я думаю, что это, наверное, мое любимое решение, но оно все еще кажется чем-то вроде хлопот.

...