我正在制作一个相当简单的程序,但我无法弄清楚这里有什么问题。这是我的主要课程:
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 对象。
答案 0 :(得分: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);
}