2017-08-23 129 views
1

我正在研究一個相當簡單的程序,但我無法弄清楚這裏有什麼問題。這是我的主類:從FXML調用方法時發生java.lang.reflect.InvocationTargetException

public class Main extends Application { 

    private QualityList ql; 
    private QualityController controller; 
    private Stage primaryStage; 

    @Override 
    public void start(Stage stage) throws Exception { 
     primaryStage = stage; 
     Parent root = FXMLLoader.load(getClass().getResource("/controller/QualityWindow.fxml")); 
     primaryStage.setTitle("Kwaliteiten V1.0"); 
     primaryStage.setScene(new Scene(root, 1250, 800)); 
     primaryStage.show(); 

     ql = new QualityList(); 
     controller = new QualityController(); 
     controller.initController(ql); 
     controller.setStage(primaryStage); 

     ql.addObserver(controller); 
    } 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

這是我的控制器類(我有麻煩的部分):

private QualityList ql; 
private Stage stage; 
private DBClass connect; 

public void initController(QualityList ql){ 
    this.ql=ql; 
    this.connect = new DBClass(); 
    readData(); 
    initialiseTable(); 
} 
. 
. 
. 
@FXML 
void printData(ActionEvent event){ 
    ql.printData(); 
} 

我遇到的問題是,通過在該方法printData調用時接口與事件它將導致java.lang.reflect.InvocationTargetException

但是,如果從例如initController方法調用相同的方法,它將完全按照計劃運行。

這個問題也似乎只有在原始對象在主類中生成並傳遞給控制器​​時纔出現。 如果我在控制器本身製造對象,則沒有問題,但是我不能觀察對象。

回答

0

我的控制器初始化錯了。這是富達的方式:

@Override 
public void start(Stage primaryStage) throws Exception { 
    ql = new QualityList(); 
    this.primaryStage = primaryStage; 

    FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(getClass().getResource("/controller/QualityWindow.fxml")); 
    Parent root = loader.load(); 
    QualityController controller = loader.getController(); 
    //Parent root = FXMLLoader.load(getClass().getResource("/controller/QualityWindow.fxml")); 
    primaryStage.setScene(new Scene(root, 1250, 800)); 
    primaryStage.setTitle("Kwaliteiten V1.0"); 
    primaryStage.show(); 

    controller.initController(ql); 
    ql.addObserver(controller); 
} 
public static void main(String[] args) { 
    launch(args); 
} 
相關問題