2017-08-23 2 views
1

Ich arbeite an einem ziemlich einfachen Programm, aber ich kann nicht herausfinden, was hier falsch ist. Das ist meine Hauptklasse:java.lang.reflect.InvocationTargetException beim Aufruf der Methode von 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); 
    } 
} 

Das ist meine Controller-Klasse (Die Teile Ich haben Probleme mit):

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

Das Problem, das ich habe ist, dass beim Aufruf von der Methode printdata durch die Schnittstelle mit einem Ereignis wird es eine java.lang.reflect.InvocationTargetException verursachen.

Allerdings wird beim Aufruf der gleichen Methode von zum Beispiel die initController Methode genau wie geplant ausgeführt.

Dieses Problem scheint auch nur dann zu bestehen, wenn das ursprüngliche ql Objekt in der Hauptklasse erstellt und an den Controller übergeben wird. Wenn ich das ql Objekt in der Steuerung selbst mache, gibt es keine Probleme, aber dann kann ich nicht das ql Objekt beobachten.

Antwort

0

Ich habe die Initialisierung meines Controllers falsch gemacht. Dies ist der richtige Weg, es zu tun:

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