2016-07-31 16 views
0

Ich habe Probleme mit Null-Zeiger beim Versuch, Tabelle Population zu initiieren. Ich habe mein Objekt aus der Klasse Komponenta welche Daten ich in ObservableList einfügen und dann versuchen, es in einer TableView zu zeigen. Ich habe dieses Mal versucht, mit mehreren fxml-Bildschirmen zu arbeiten und aus irgendeinem Grund funktioniert es nicht mit mehr als 1 .fxml. test ist eine Methode, die ich anrufe, wenn eine Taste auf main.fxml gedrückt wird, so dass sie eine neue lädt.JavaFX TableView/Spalte Nullzeiger Ausnahme

MainController.java

public ObservableList<Komponenta> komponente = FXCollections.observableArrayList(new Komponenta("Neki Tip", "Neki Proizvodac","Neki opis", 5)); 
@FXML 
private TableView<Komponenta> Tablica; 
@FXML 
private TableColumn<Komponenta,String> Tip; 
@FXML 
private TableColumn<Komponenta,String> Proizvodac; 
@FXML 
private TableColumn<Komponenta,String> Karakteristika; 
@FXML 
private TableColumn<Komponenta,Integer> Komada; 
@FXML 
private void test(ActionEvent event) throws IOException{ 
    Node node=(Node) event.getSource(); 
    Stage stage = (Stage) node.getScene().getWindow(); 
    Parent root = (Pane)FXMLLoader.load(getClass().getResource("ElKomponenta.fxml")); 
    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show();  
} 
@FXML 
private void initialize() throws Exception { 
    System.out.println(komponente.get(0).getKomada()); 
    Tip.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("tip")); 
    Proizvodac.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("proizvodac")); 
    Karakteristika.setCellValueFactory(new PropertyValueFactory<Komponenta, String>("karakteristika")); 
    Komada.setCellValueFactory(new PropertyValueFactory<Komponenta, Integer>("komada")); 
    Tablica.setItems(komponente); 
} 

ElKomponenta.fxml

<TableView fx:id="Tablica" prefHeight="603.0" prefWidth="889.0"> 
    <columns> 
    <TableColumn fx:id="Tip" prefWidth="177.0" text="Tip" /> 
    <TableColumn fx:id="Proizvodac" minWidth="0.0" prefWidth="207.0" text="Proizvođač" /> 
     <TableColumn fx:id="Karakteristika" prefWidth="326.0" text="Karakteristike" /> 
     <TableColumn fx:id="Komada" minWidth="0.0" prefWidth="178.0" text="Komada" /> 
    </columns> 
</TableView> 

Fehler:

Caused by: java.lang.NullPointerException 
at application.MainController.initialize(MainController.java:62) 
... 27 more 

Welche ist die Linie, die zuerst zu setCellValueFactory beginnt.

Auch bei Bedarf Komponenta.java

public class Komponenta { 

    private String proizvodac; 
    private String tip; 
    private String karakteristika; 
    private Integer komada; 

    public Komponenta(String a, String b, String c, Integer d){ 
     this.tip = a; 
     this.proizvodac = b; 
     this.karakteristika = c; 
     this.komada = d; 
    } 

    public String getProizvodac() { 
     return proizvodac; 
    } 

    public void setProizvodac(String proizvodac) { 
     this.proizvodac = proizvodac; 
    } 

    public String getTip() { 
     return tip; 
    } 

    public void setTip(String tip) { 
     this.tip = tip; 
    } 

    public String getKarakteristika() { 
     return karakteristika; 
    } 

    public void setKarakteristika(String karakteristika) { 
     this.karakteristika = karakteristika; 
    } 

    public Integer getKomada() { 
     return komada; 
    } 

    public void setKomada(Integer komada) { 
     this.komada = komada; 
    } 

} 

Antwort

1

main.fxml scheint keine TableColumn mit fx:idTip, enthalten aber scheint die gleiche Controller-Klasse zu verwenden. Da initialize am Ende der aufgerufen wird alle Aufruf einer FXMLLoader.load Methode, die die Controller-Instanz verwendet, führt das Laden von main.fxml in der NullPointerException.

Verwenden Sie verschiedene Controller-Klassen für beide fxml s statt: Die einen für main.fxml sollte die Schaltfläche Action-Handler und die eine für ElKomponenta.fxml enthalten sollte, die TableView bezogenes enthalten.

Verwandte Themen