2014-01-10 22 views
3

我正嘗試將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' –

回答

5

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