ロードを呼び出しているコントローラーと同じパッケージにある FXML ファイルをロードしようとすると、ロードされている FXML ファイルのコントローラー クラスを参照する ClassNotFound 例外が発生します。呼び出し元のコントローラーを含むパッケージとは異なるパッケージから同じ名前の FXML ファイルを読み込もうとすると、ファイルが期待どおりに読み込まれます。
projectselectorcontroller クラスのコードを次に示します。コメント化されたコードは、例外を引き起こす行です。
@Override
public void Response(KWMessage Message)
{
if(Message.getType() != -1)
{
switch(Message.getType())
{
case 6000:
Platform.runLater(new Runnable()
{
@Override
public void run()
{
//This file loads as expected
ExtendedNode node = mainController.load("/newproject/newproject.fxml");
//This file does not load
//ExtendedNode node = mainController.load("/projectselector/newproject.fxml");
NewProjectController controller = (NewProjectController)node.getController();
mainController.setCurrentNode(node);
}
});
}
}
}
ロード方法はこちら。URLを確認したところ、正しいことがわかりました。2 つのコントローラー クラスが同じパッケージに存在できない可能性はありますか?
public ExtendedNode load(String FXML)
{
ExtendedNode node;
URL location = getClass().getResource(FXML);
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(location);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
try
{
node = new ExtendedNode();
node.setNode((Parent)fxmlLoader.load(location.openStream()));
node.setController((iMainController)fxmlLoader.getController());
node.getController().setMainController(this);
}
catch (IOException ex){node = null;}
return node;
}