2016-03-10 72 views
0

我有以下問題:無法加載資源,始終返回null

我正在開發使用JavaFX作爲GUI和搖籃爲構建自動化系統的IntelliJ IDEA 15一個Java 8應用程序(之前從未雖與工作搖籃)。加載fxml文件時,我總是得到一個IllegalStateException「位置未設置」,原因是因爲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(); 
    } 
} 

也許搖籃負責這個,我不知道。

的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; * AJ

而且這裏也是我的結構的圖像: Link to the image

+1

嘗試用斜線的getResource(「/ gui.fxml」) – AdamSkywalker

+0

@AdamSkywalker將其更改爲的getResource(「/ gui.fxml」),並將其移動到資源文件夾可以解決問題,THX –

回答

1

搖籃也有類似的項目結構,來源和資源之間Maven和方式隔開。 資源應放入src/main/resources

將您的gui.fxml文件移動到resource文件夾中,應找到它。

你得到的文物都放在$PROJECT/target,如果你對未來有類似的問題,這是一個好主意,看看你的​​或才能看到,如果文件收拾好預期不斷歸檔什麼。

+1

就像我寫上面@AdamSkywalker :將文件移動到資源文件夾並將getResource(「gui.fxml」)更改爲getResource(「/ gui.fxml」)可解決此問題。我也想通過添加'sourceSets {main {resources {srcDirs = [「src/main/java」] includes = [「**/*。fxml」]}}}''build.gradle' is一個可能的解決方案。 –