从Javafx2.2迁移到Javafx8

从Javafx2.2迁移到Javafx8

问题描述:

我正尝试将Javafx2.2应用程序迁移到Javafx8。我得到以下问题的同时使用嵌套FXML从Javafx2.2迁移到Javafx8

javafx.fxml.LoadException: Root hasn't been set. 
Use method setRoot() before load. 

FXML文件:

<fx:root type="javafx.scene.layout.VBox" 
     xmlns:fx="http://javafx.com/fxml" 
     xmlns="http://javafx.com/javafx/8" 
     fx:controller="com.ui.TestController"> 
    <TextField fx:id="textField"/> 
    <Button text="Click Me"/> 
</fx:root> 

代码:

FXMLLoader loader = new FXMLLoader(); 
loader.setResources(bundle); 
InputStream in = Main.class.getClassLoader().getResourceAsStream(fxml); 
loader.setBuilderFactory(new JavaFXBuilderFactory()); 
loader.setLocation(Main.class.getResource(fxml)); 
Node page = null; 
try { 
    page = (Node) loader.load(in); 
} catch (IOException e) { 
    logger.error("{}", e); 
} finally { 
    try { 
     in.close(); 
    } catch (IOException e) { 
     logger.error("{}", e); 
    } 
} 

我需要page节点在另一个BorderPane.center设置。它适用于Javafx2.2。我在这里错过了什么?任何帮助,将不胜感激。

+0

这是TestController的代码吗?或从另一个控制器? FXML的嵌套在哪里? – Puce

+0

我在一个util函数中添加了这个片段。它需要参数'String fxml'(Path to new fxml)和bundle,并返回我用'BorderPane.center'附加的'Node'。 'BoarderPane.left'包含'menu'-通过点击菜单我需要将'Node'添加到'BorderPane.center' –

使用<VBox></VBox>而不是<fx:root type="javafx.scene.layout.VBox"></fx:root>已修复此问题,至少Javafx build b121