2016-03-10 2 views
0

У меня есть следующая проблема:Не удается загрузить ресурс, всегда возвращает нуль

Я занимаюсь разработкой приложения Java 8 с IntelliJ IDEA 15 с использованием JavaFX в качестве графического интерфейса и Gradle как системы автоматизации сборки (никогда не работал с Gradle до того, хотя). Я всегда получаю IllegalStateException «Место не установлено» при загрузке файла fxml, причина в том, что getClass().getResource("gui.fxml") всегда возвращает null.

Мой Java Код:

package minerva.gui; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     System.out.println(getClass().getResource("gui.fxml")==null); // DEBUG: always returns true, but why? 

     FXMLLoader loader = new FXMLLoader(getClass().getResource("gui.fxml")); 
     Parent root = (Parent) loader.load(); 
     primaryStage.setTitle("Minerva"); 
     primaryStage.setScene(new Scene(root)); 
     Controller control = loader.getController(); 
     primaryStage.show(); 
    } 
} 

Может быть Gradle отвечает за это, я не знаю.

build.gradle:

group 'minerva.impl' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 

sourceCompatibility = 1.5 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.hsqldb:hsqldb:2.3.1' 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

settings.gradle:

rootProject.name = 'minerva' 

Я также проверил образцы ресурсов в настройках IntelliJ, они должны быть действительными:? .java;!? .form;!? .class;!? .groovy;!? .scala;!? .flex;!? .kt;!? !?. .clj; * А.Я.

И здесь также образ моей структуры: Link to the image

+1

попробовать с слэш getResource («/ gui.fxml») – AdamSkywalker

+0

@AdamSkywalker изменяя его getResource («/ gui.fxml») и перемещая его в папку ресурсов решает проблему, THx –

ответ

1

Gradle имеет аналогичную структуру проекта как мавена и отделяет между источниками и ресурсами. Ресурсы должны быть помещены в src/main/resources.

Переместите файл gui.fxml в папку resource и его необходимо найти.

Ваши результирующие артефакты размещены в $PROJECT/target, и если у вас возникнут подобные проблемы в будущем, неплохо заглянуть в ваш jar,war,ear или какой-нибудь архив, чтобы увидеть, если файлы упакованы, как ожидалось.

+1

Как я писал выше @AdamSkywalker : перемещение файла в папку ресурса и изменение getResource («gui.fxml») на getResource («/ gui.fxml») решает проблему. Я также понял, что добавив 'sourceSets {main {resources { srcDirs = [" src/main/java "] includes = [" **/*. Fxml "]}}}' to 'build.gradle' is возможное решение. –

Смежные вопросы