2016-03-29 9 views
1

TabPaneを含む私のプログラム用のメインFXML文書があります。各タブごとに、独自のコントローラとfxmlファイルを作成します。外部のfmxlファイルをメインのfxmlドキュメントに含めると、プログラムの実行が拒否されます。ここに私のメインのFXML文書は次のとおりです。ここ である私のjavaファイルのコピーFXML Doccumentが他のfxmlファイルのインポートを拒否する

@Override 
public void start(Stage stage) throws Exception { 
    FXMLLoader fxml = new FXMLLoader(); 
    Parent root = fxml.load(getClass().getResource("FXMLDocument.fxml").openStream()); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    FXMLDocumentController fdc = fxml.getController(); 
} 

エラー:

Caused by: javafx.fxml.LoadException: Base location is undefined. unknown path:97 
+0

を使うのか?エラーメッセージが出ますか? –

+1

この行 'fx:include source =" Tab1.fxml "/>'には、開始時に山括弧がありません: '<' – ManoDestra

+0

括弧がありません。私はそれを実行しようとするとエラーが発生しました。ありがとう – tashtoons

答えて

1

このエラーは、あなたがFXMLLoaderlocationプロパティを設定していないので、原因、およびその代わりれますFXMLをロードするInputStreamを指定しています。 FXMLLoaderは、付属のファイルの場所を解決するために元のfxmlファイルの場所を知っている必要があります。例外的な状況では、実際にはload(InputStream)メソッドを使用する必要があります。リソース(つまり、アプリケーションjarファイルのファイルまたはリソース)以外のソースからfxmlをロードする場合。

代わりに、意味 "を実行することを拒否し、" どういう

FXMLLoader fxml = new FXMLLoader(); 
fxml.setLocation(getClass().getResource("FXMLDocument.fxml")); 
Parent root = fxml.load(); 

または、同等に、

FXMLLoader fxml = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); 
Parent root = fxml.load(); 
+0

ありがとうございました – tashtoons

+0

fx:includeタグに含まれるfxmlファイルの絶対パスを使って、 'InputStream'を使って動作させることができました。しかし、私は 'setLocation'を使うように変更する方が良い方法だと思います。 –

関連する問題