2016-03-03 129 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