2013-07-04 19 views
6

私はjavaFXを使い始めましたが、私は単純なアプリケーションを実行しようとしています。 UIはjavaFXシーンビルダで作成され、MainクラスはUIを表示することになっています。アプリを実行しているときjavaFXアプリケーションエラー:リソースが指定されていません

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(Main.class, (String[])null); 
    } 

@Override 
public void start(Stage primaryStage) {; 
    try { 
     AnchorPane root=(AnchorPane)FXMLLoader.load(Main.class.getResource("Main.fxml")); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.setTitle("Issue Tracking Lite Sample"); 
     primaryStage.show(); 
    } catch (IOException e) {System.err.println(e);} 

    } 


} 

私はこのエラーを得た:

No resources specified. 

/D:/workspace/FileSharing_ServerSide/bin/com/Shayan/FileSharing/Server/Main.fxml:16 
    at javafx.fxml.FXMLLoader$Element.processPropertyAttribute(FXMLLoader.java:305) 
at javafx.fxml.FXMLLoader$Element.processInstancePropertyAttributes(FXMLLoader.java:197) 
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:588) 
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2430) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2136) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2742) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2721) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2707) 
javafx.fxml.LoadException: No resources specified. 

これは、ファイルが存在しないと言うが、それはまったく同じ名前でそのフォルダに存在します!コードと同じパッケージに入っています。誰が何が起こっているのか知っていますか? ありがとうございました

+2

wha tはMain.fxmlの内容ですか?そこにエラーがあるように見えます。 – Dahaka

+0

Main.fxmlはあなたのメインクラスと同じパッケージで正しいですか? –

+0

はい、エラーはfxmlファイルからでした!コントローラの名前がfxmlコードで正しく指定されていませんでした。ありがとうDahaka;) –

答えて

11

リソースが不足してFXMLLoaderがシーングラフを完全に構築できなかった場合、JavaFXは例外javafx.fxml.LoadException: No resources specified.をスローします。

これは、さまざまな理由で発生する可能性があります。

  1. fxmlファイルで指定されたコントローラをロード中にエラーが発生しました。
  2. fxmlファイルがResourceBundleのリソースを参照しようとしましたが、FXMLLoaderにはResourceBundleが正しく構成されていませんでした。

この例外がJavaFXからスローされる理由は他にもありますが、何らかの理由でFXMLLoaderがfxmlファイルからシーングラフを作成しようとしているときに例外が発生しました。

+0

あなたの2つの理由を強調してください。私は永遠に実現しました。ありがとう! – oskopek

1

リソースを取得するには、完全な(!)ベース名を指定する必要があります。つまり、以前のすべてのパッケージで。

リソースファイルは、(それが一緒に物事を維持するのに役立ちますよう非常に合理的である)、コントローラクラスと同じ浅名前を持っている場合は、次の方法でこれを行うことができます。

String className = this.getClass().getCanonicalName(); 
// @formatter:off 
    ResourceBundle languageResource = 
      ResourceBundle.getBundle(className, Locale.GERMAN); 
    // formatter:on 

    Object objPane = FXMLLoader.load(fxmlUrl, languageResource); 

私はオブジェクトとロケールを取得してトリックを行うプライベートリソースローダーヘルパーを作成しました。もちろん、私は定数からではなく、自分の設定から構築されたロケールを使用しますが、私は物事を単純にしたいと思っていました。リソースファイルの名前については

は:私のクラスは(同じパッケージに)メインウィンドウ、リソースファイルという名前のとおり、言語の一部である「デ」 MainWindow_de.properties(ですので、私も持っていますこれは、ファイル名が構築されている方法であるとして、パッケージ内のMainWndow_en.properties。

延長は延長しないと、ファイルは、よく知られた例外につながる、認識されません。、必要とされる。

研究中に他の人が時間を費やさないようにしたいと思っています。

関連する問題