当我尝试加载与调用加载的控制器位于同一包中的 FXML 文件时,我得到一个 ClassNotFound 异常,该异常指的是正在加载的 FXML 文件的控制器类。当我尝试从与包含调用控制器的包不同的包中加载同名的 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);
}
});
}
}
}
这是加载方法。我检查了网址,发现它是正确的。两个控制器类是否有可能不能驻留在同一个包中?
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;
}