繁体   English   中英

从FXML调用方法时出现java.lang.reflect.InvocationTargetException

[英]java.lang.reflect.InvocationTargetException when calling method from FXML

我正在一个相当简单的程序上工作,但是我无法弄清楚这里出了什么问题。 这是我的主班:

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方法调用相同的方法时,它将完全按计划运行。

仅当在主类中创建了原始ql对象并将其传递给控制器​​时,该问题才会出现。 如果我在控制器本身中创建ql对象,就没有问题,但是我无法观察到ql对象。

我没有初始化控制器。 这是最丰富的方法:

@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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM