У меня сложная архитектура приложения с общей библиотекой, установленной в качестве внешнего jar-файла и используемой как моим основным приложением (также jar-файлом), так и несколькими пакетными модулями (также jar-файлы ...), загружаемыми по требованию основного приложения.
Мне не удается заставить контроллер FXML из модуля использовать пользовательский элемент управления из общей библиотеки.
Мой контекст - все JavaFX 8.
Все работает просто отлично, запуская главное приложение из Eclipse IDE.
Но когда я запускаю основное приложение своих пакетов из командной строки, я получаю некоторые:
javafx.fxml.LoadException
Вызывается: java.lang.IllegalArgumentException: Не удается установить поле net.demo.control.MyControl net.demo.module.modtest.gui.FormView.testcontrol в net.demo.control.MyControl
Я пытался заставить загрузчик классов FXMLLoader на какой-то пользовательский URLClassLoader на основе пути для включения модуля, но я не настолько убежден, что это может помочь решить мою проблему.
Вот мой пример демонстрационного представления FXML, загруженного загрузчиком FXML, который завершается ошибкой:
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import net.demo.control.MyControl?>
<fx:root fx:id="root" type="Pane" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
<children>
<VBox>
<MyControl fx:id="myControl" />
</VBox>
</children>
</fx:root>
Я ожидаю, что FXMLLoader сможет импортировать класс для элемента управления из внешней библиотеки jar.
Внешняя библиотека jar распознается из модулей, созданных в основном приложении, так как мне удалось загрузить файлы ресурсов из общей библиотеки в модули.