2017-05-01 5 views
2

Help!私は立ち往生しています..私は私のメインjavafxアプリを実行しようとしますJavaFX java.lang.IllegalStateException:場所が設定されていません

私のコードです。以下は

@Override 
public void start(Stage primaryStage) throws Exception { 
    try { 
     FXMLLoader loader = new FXMLLoader(); 
     loader.setLocation(getClass().getResource("/com/utmkl/fxml/SimulatorDisplay.fxml")); 
     Parent content = (Parent)loader.load(); 

    primaryStage.setResizable(false); 
    primaryStage.initStyle(StageStyle.UTILITY); 
    primaryStage.setScene(new Scene(content)); 
    primaryStage.show();    
} catch(Exception e) { 
    e.printStackTrace(); 
} 

私のフォルダ構造です: 写真の下Folder structure

はあなたがloader.setLocation(getClass().getResource("/com/utmkl/fxml/ControllerDisplay.fxml"));と場所を設定しない場合でもエラー

java.lang.IllegalStateException: Location is not set. 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at com.utmkl.VMCSManager.start(VMCSManager.java:43) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 

答えて

2

..私ののMaven-JavaFXのフォルダ構造は

VMCS 
- src/main/java 
    - com.utmkl 
      VMCSManager.java 
- src/main/resources 
    - com.utmkl.fxml 
      SimulatorDisplay.fxml 

です正しいコード(成功したコード)

VMCSManager.java

@Override 
    public void start(Stage primaryStage) throws Exception { 
     try { 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(getClass().getResource("fxml/SimulatorDisplay.fxml")); 
      Parent content = loader.load(); 

      Scene scene = new Scene(content); 

      primaryStage.setResizable(false); 
      primaryStage.initStyle(StageStyle.UTILITY); 

      primaryStage.setScene(scene); 
      primaryStage.show();    
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+0

'fxml/nameofview.fmxl'を'/fxml/nameofview.fxml'に変更して動作させる必要がありました。 – geometrikal

0

であることは、リソースのURLにはない可能性があります実際にはクラスパス上の既存のリソースを参照します。

コードにSystem.out.println(getClass().getResource("/com/utmkl/fxml/ControllerDisplay.fxml"));を追加すると、結果としてnullが印刷されると思います。ここで

リソースが

メインクラスと同じフォルダ構造にする必要があり、私は答えを見つけた

+0

私はそれがMavenプロジェクト構造とは何かだと思う..私はちょうど今、私はMavenのが、Gradleのを、使用していない –

+0

でなく、Gradleののデフォルトのディレクトリ構造私の知る限り、これを解決する方法がわからないことと同じですMaven's。 src/main/javaでは、あなたのJavaのソースをsrc/main/resourcesに持っていなければなりません。あなたのアプリをビルドすれば、Mavenはそれらを結合します。 EclipseなどのIDEでは、両方のディレクトリがソースフォルダとしてマークされていることを確認する必要があります。IDE内からアプリケーションを実行すると、クラスパスにリソースが追加されません。 Gradleのプラグインを使用すると、これはGradleプロジェクトをインポートするときに自動的に実行されます。私はMavenにも何かが存在すると思う。 –

関連する問題