Я новичок в модульности Java. Я использую Java 9.
Программа компилируется без нареканий. Он также отлично работает из папки «взорванный модуль», но с одним исключением: он генерирует исключение, причина которого возникает со следующей строкой кода:
URL introURL = AboutPanel.class.getResource("help.html");
introURL
присваивается ноль.
При запуске программы в Eclipse или из файла JAR, экспортированного из Eclipse, URL-адрес корректно заполняется адресом файла ресурсов (help.html), который находится в том же каталоге, что и вызывающий класс.
Вот команда, которую я использую для запуска программы из «разобранного модуля», который находится в папке «out»:
java -p out/ -m moduleTCD/com.adonax.tanpura.TCDLaunch
Проект состоит из двух пакетов, которые я объединяю в один модуль.
src/moduleTCD/com/adonax/tanpura
/pfaudio
«Основной» класс (точка входа) - tanpura.TCDLaunch
.
Вот содержание класса module-info.java
:
module moduleTCD {
exports com.adonax.tanpura;
requires java.base;
requires java.desktop;
}
Сообщение об ошибке при попытке запуска из командной строки:
java.io.IOException: invalid url
at java.desktop/javax.swing.JEditorPane.setPage(Unknown Source)
at moduleTCD/com.adonax.tanpura.documentation.AboutPanel.<init>(AboutPanel.java:28)
at moduleTCD/com.adonax.tanpura.panels.ControlPanel.initializeHelpPanel(ControlPanel.java:525)
at moduleTCD/com.adonax.tanpura.panels.ControlPanel.<init>(ControlPanel.java:163)
at moduleTCD/com.adonax.tanpura.TCDLaunch.main(TCDLaunch.java:43)
Это исключение выдается в try / catch для IOException в точке, где метод setPage JEditorPane вызывается с нулем в качестве аргумента.
textArea.setPage(introURL);
Сначала у меня не было строки экспорта в моем модуле-info.java, но я добавил ее, когда я прочитал следующее из API для Class.getResource
:
Возвращает:
Объект URL; null, если ресурс с таким именем не найден, ресурс не может быть найден по URL, ресурс находится в пакете, который
не открыт хотя бы для модуля вызывающего или доступа к ресурсу
отказано администратором безопасности.
Это повысило вероятность того, что пакет может понадобиться Class
в модуле Java.base. Команда exports
там сейчас максимально широка. Но добавление этого не изменило ошибку. Мне интересно, есть ли что-то не так с тем, как я это сделал, или есть что-то еще, что я пропускаю.