Приложение JavaFX не загружает файлы fxml при экспорте в файл jar - PullRequest
0 голосов
/ 14 мая 2018

Я только что закончил свой первый Java-проект, однако я не могу заставить его работать правильно. Он загрузит исходный файл fxml, на котором работает весь калькулятор, однако, когда я пытаюсь добавить выходной / перерыв в меню выходной / перерыв, должна отображаться диалоговая панель, чтобы пользователь мог заполнить информацию, но я продолжаю получать местоположение, а не установить ошибку при запуске файла jar в cmd. Все работает, когда я запускаю его в intellij, но не в банке.

Вот так у меня настроены мои файлы. Я создал каталог ресурсов в проекте FinishedCalCulator и отметил его как корень ресурса

File Structure

Так я устанавливаю расположение файла FXML в загрузчик. Это работает, когда я запускаю его в Intellij, но не в файле jar.

Method call

Структура проекта Project Structure

Запуск через CMD Running through CMD

Исключение целевого вызова / ошибка местоположения не установлена Invocation Target Exception/Location not set error

Я осмотрелся и нашел несколько постов, в которых говорилось о размещении всех файлов fxml в файл ресурсов, и я сделал это, и он снова заработал в Intellij, но он все равно не будет отображать диалоговые панели при попытке добавить их. Я не совсем уверен, что я делаю здесь не так. Я не думаю, что я полностью понимаю, что я делаю неправильно. Любая помощь будет отличной.

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы расширить мой комментарий ...

Ответ

В вашем коде вы звоните getResource("/addHolidayDialog.fxml"). Имя файла вашего ресурса, однако, AddHolidayDialog.fxml. Просто измените «a» в вашем коде на «A», и ваш код должен работать.


Объяснение

Запуск из Intellij

Когда вы запускаете приложение из Intellij, оно использует выходные файлы в каталоге out/production/classes. Другими словами, классы не находятся в файле JAR. Когда вы звоните getClass().getResource("/addHolidayDialog.fxml"), вы получите URL как:

file://C:/.../out/production/classes/addHolidayDialog.fxml

, который работает в Windows, несмотря на тот факт, что файл на самом деле с именем AddHolidayDialog.fxml, потому что Windows имеет нечувствительную к регистру файловую систему.

Бег из JAR

Затем вы экспортируете свой проект в JAR и запускаете его оттуда. Позвонив по тому же коду getResource, вы получите URL (если код работает), например:

jar:file://C:/.../your-application.jar!/addHolidayDialog.fxml

То, что на самом деле ваш код возвращает с getResource, это null. Согласно файлу JAR, ресурс addHoldiayDialog.fxml не существует. Однако он с радостью сообщит вам, что AddHolidayDialog.fxml существует . Причиной этого является то, что файл JAR имеет чувствительную к регистру «файловую систему».

...