2016-03-03 127 views
0

當我嘗試使用注入到我的主控制器的控制器時,我總是得到一個Nullpointer異常(widgetlinebelowtableController爲空)。我看到這個答案,但並沒有幫助:JavaFX controller injection does not workJavafx注入控制器爲空

注入FXML:

<HBox fx:id="widgetLineBelowTable" maxWidth="Infinity" spacing="5.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.widgets.WidgetLineBelowTableController"> 
     <padding> 
      <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> 
     </padding> 
     <Label fx:id="warningLabel" text="Overflow"/> 
    </HBox> 

控制器此FXML:

public class WidgetLineBelowTableController 
    { 
    @FXML 
    Label warningLabel; 

    public void setColor(int r, int g, int b) { 
     warningLabel.setTextFill(Color.rgb(r,g,b)); 
    } 

} 

我主要FXML:

<VBox xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1" stylesheets="/sample/style.css" fx:controller="sample.mainController"> 
    <fx:include source="/sample/menubar/MenuBar.fxml"/> 
    <TabPane> 

     <tabs> 
      <Tab closable="false" text="FirstTab"> 
       <VBox> 
        <TitledPane collapsible="false"> 
         <text>Results</text> 
         <fx:include source="table/Table.fxml"/> 
        </TitledPane> 
        <fx:include fx:id="widgetlinebelowtable" source="widgets/WidgetLineBelowTable.fxml" /> 
       </VBox> 
      </Tab> 
      <Tab closable="false" text="SecondTab"> 

      </Tab> 
     </tabs> 
    </TabPane> 
</VBox> 

主控制器:

import sample.widgets.WidgetLineBelowTableController; 

public class mainController { 

    @FXML 
    private WidgetLineBelowTableController widgetlinebelowtableController; 

    public mainController() { 
     widgetlinebelowtableController.setColor(255,0,0); 
    } 

} 

感謝您的幫助。

回答

1

您正嘗試訪問構造函數中的注入字段,這顯然不起作用(因爲FXMLLoader只有在創建控制器之後(即構造函數執行後)才能注入任何內容)。

移動代碼到initialize()方法:

public class MainController { 

    @FXML 
    private WidgetLineBelowTableController widgetlinebelowtableController; 

    public void initialize() { 
     widgetlinebelowtableController.setColor(255,0,0); 
    } 

} 

另外,請遵循標準naming conventions

+0

謝謝你,我的壞 – Joey