Я пытаюсь загрузить файл FXML из каталога ресурсов, чтобы отобразить окно JavaFX, однако, что бы я ни делал, я не могу найти правильный способ ссылки на ресурс.
Моя структура каталогов выглядит следующим образом:
src
main
java
gui
App.java
module-info.java
resources
MainWindow.fxml
out
production
classes
// All compiled classes
resources
MainWindow.fxml
Содержимое module-info.java
следующее:
module MyApp {
requires javafx.controls;
requires javafx.graphics;
requires javafx.fxml;
exports gui;
}
Я пытаюсь загрузить файл MainWindow.fxml в App.java следующим образом: getClass().getResource("/MainWindow.fxml");
Я пытался использовать имена MainWindow.fxml
и /MainWindow.fxml
, однако оба возвращают значение null. Как видно из структуры каталогов, копируется и содержимое ресурсов, поэтому они должны быть доступны во время выполнения. Каталог ресурсов помечен как таковой в IntelliJ. Я использую Gradle для управления зависимостями.
Как я могу загрузить файлы из каталога ресурсов?
Вот мой файл build.gradle
:
plugins {
id 'application'
id 'java'
id 'org.openjfx.javafxplugin' version '0.0.5'
}
group 'MyApp'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.11
javafx {
modules = [
'javafx.controls',
'javafx.graphics',
'javafx.fxml'
]
}
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation 'org.openjfx.javafx-controls:11.0.1'
implementation 'org.openjfx.javafx-fxml:11.0.1'
implementation 'org.openjfx.javafx-graphics:11.0.1'
}
App.class.getResource("../resources/MainWindow.fxml");
? - person Flown   schedule 02.01.2019opens gui to javafx.fxml
, как в этом пример. Используете ли вы плагин Gradle для JavaFX? Можете ли вы показать свой файл build.gradle? - person José Pereda   schedule 02.01.2019implementation
, плагин сделает это за вас. Также не нужно добавлятьjavafx.graphics
, он добавляется элементами управления. Что касается вашей проблемы, у вас есть исключение? Можете ли вы опубликовать трассировку стека? Пробовали ли вы запустить пример, на который я ссылался ранее, он у вас работает? - person José Pereda   schedule 02.01.2019$ ./gradlew jar
также может потребоваться указать основной класс:jar { manifest { attributes 'Main-Class': 'gui.App' } }
) и получить доступ к ресурсу, используя:InputStream asStream = App.class.getModule().getResourceAsStream("MainWindow.fxml");
- person caco3   schedule 02.01.2019Error: Could not find or load main class gui.App Caused by: java.lang.NoClassDefFoundError: javafx/application/Application
- person tofiffe   schedule 02.01.2019NullPointerException
, но встроенный jar не - person caco3   schedule 03.01.2019apply plugin: 'idea' idea { module { inheritOutputDirs = true } }
кbuild.gradle
сработало для меня... (см. этот вопрос) - person caco3   schedule 03.01.2019--patch-module MyApp=out/production/resources
. - person Alan Bateman   schedule 03.01.2019