2014-10-09 69 views
0

中的項目時出現異常,此時我要設置已聲明的表的項目我收到異常。我不知道我做錯了什麼。每次設置ObservableList JavaFX

錯誤代碼:

Okt 09, 2014 11:06:10 AM application.Main start 
    SCHWERWIEGEND: null 
    javafx.fxml.LoadException: 
    /D:/Users/muellerl/workspace/Hydaba/bin/application/table_ui.fxml 
    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at application.Main.start(Main.java:17) 
    at com.sun.javafx.application.LauncherImpl$8.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$7.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$6.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$300(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$4$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
    Caused by: java.lang.NullPointerException 
     at controller.main_controller.initialize(main_controller.java:49) 
     ... 20 more 

所以,當我刪除einheitenTable.setItems(einheitendata);我沒有收到錯誤。他找到源「table_ui.fxml」。所以我認爲這是TableView的一個問題。 這是我寫的其他代碼。希望你能幫助我解決這個問題。第49行中的錯誤屬於main_controller.java。

main.java:

package application; 

import java.util.logging.Level; 
import java.util.logging.Logger; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 


public class Main extends Application { 
    @Override 
    public void start(Stage Stage) { 
     try { 
      Parent root = FXMLLoader.load(getClass().getResource(
        "/application/table_ui.fxml")); 
      Scene scene = new Scene(root); 
      Stage.setTitle("Hydaba-Client"); 
      Stage.setScene(scene); 
      Stage.show(); 
     } catch (Exception e) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

einheiten_table.java:

package table; 

import javafx.beans.property.SimpleIntegerProperty; 
import javafx.beans.property.SimpleStringProperty; 

public class einheiten_table { 

private final SimpleIntegerProperty rBleinr; 
private final SimpleStringProperty rEinheit; 
private final SimpleStringProperty rLiteeinheit; 
private final SimpleStringProperty rEinheitengruppe; 
private final SimpleStringProperty rBasiseinheit; 
private final SimpleIntegerProperty rUmrechnungsfaktor; 

public einheiten_table (int sBleinr, String sEinheit, String sLiteeinheit, String sEinheitengruppe,String sBasiseinheit, int sUmrechnungsfaktor) { 
    this.rBleinr = new SimpleIntegerProperty(sBleinr); 
    System.out.println(sBleinr); 
    this.rEinheit = new SimpleStringProperty(sEinheit); 
    System.out.println(sEinheit); 
    this.rLiteeinheit = new SimpleStringProperty(sLiteeinheit); 
    System.out.println(sLiteeinheit); 
    this.rEinheitengruppe = new SimpleStringProperty(sEinheitengruppe); 
    System.out.println(sEinheitengruppe); 
    this.rBasiseinheit = new SimpleStringProperty(sBasiseinheit); 
    System.out.println(sBasiseinheit); 
    this.rUmrechnungsfaktor = new SimpleIntegerProperty(sUmrechnungsfaktor); 
    System.out.println(sUmrechnungsfaktor); 
} 

/** rBleinr **/ 
public Integer get_rBleinr() { 
    return rBleinr.get(); 
} 

public void set_rBleinr(Integer set) { 
    rBleinr.set(set); 
} 

/** rEinheit **/ 
public String get_rEinheit() { 
    return rEinheit.get(); 
} 

public void set_rEinheit(String set) { 
    rEinheit.set(set); 
} 

/** rLiteeinheit **/ 
public String get_rLiteeinheit() { 
    return rLiteeinheit.get(); 
} 

public void set_rLiteeinheit(String set) { 
    rLiteeinheit.set(set); 
} 

/** rEinheitengruppe **/ 
public String get_rEinheitengruppe() { 
    return rEinheitengruppe.get(); 
} 

public void set_rEinheitengruppe(String set) { 
    rEinheitengruppe.set(set); 
} 

/** rBasiseinheit **/ 
public String get_rBasiseinheit() { 
    return rBasiseinheit.get(); 
} 

public void set_rBasiseinheit(String set) { 
    rBasiseinheit.set(set); 
} 

/** rUmrechnungsfaktor **/ 
public Integer get_rUmrechnungsfaktor() { 
    return rUmrechnungsfaktor.get(); 
} 

public void set_rUmrechnungsfaktor(Integer set) { 
    rUmrechnungsfaktor.set(set); 
} 

}

main_controller.java:

package controller; 

    import java.net.URL; 
    import java.util.ResourceBundle; 

    import table.einheiten_table; 
    import javafx.collections.FXCollections; 
    import javafx.collections.ObservableList; 
    import javafx.event.ActionEvent; 
    import javafx.fxml.FXML; 
    import javafx.fxml.Initializable; 
    import javafx.scene.control.TableColumn; 
    import javafx.scene.control.TableView; 
    import javafx.scene.control.cell.PropertyValueFactory; 

    public class main_controller implements Initializable { 

     @FXML 
    TableView<einheiten_table> einheitenTable; 
    @FXML 
    TableColumn<einheiten_table, Integer> Bleinr_col; 
    @FXML 
    TableColumn<einheiten_table, String> Einheit_col; 
    @FXML 
    TableColumn<einheiten_table, String> Liteeinheit_col; 
    @FXML 
    TableColumn<einheiten_table, String> Einheitengruppe_col; 
    @FXML 
    TableColumn<einheiten_table, String> Basiseinheit_col; 
    @FXML 
    TableColumn<einheiten_table, Integer> Umrechnungsfaktor_col; 

    final ObservableList<einheiten_table> einheitendata = FXCollections.observableArrayList(
      new einheiten_table(9, "Stelle 1", "Stelle 2", "Stelle 3", "Stelle 4", 10) 
      ); 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     Bleinr_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, Integer>("rBleinr")); 
     Einheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rEinheit")); 
     Liteeinheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rLiteeinheit")); 
     Einheitengruppe_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rEinheitengruppe")); 
     Basiseinheit_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, String>("rBasiseinheit")); 
     Umrechnungsfaktor_col.setCellValueFactory(new PropertyValueFactory<einheiten_table, Integer>("rUmrechnungsfaktor")); 
//  System.out.println(einheitendata.size()); 
     einheitenTable.setItems(einheitendata); 
    } 


} 
+0

你在第49行有一個NullPointerException。那麼你能提供那部分代碼嗎?順便說一句。在java中,變量名以小寫字母開頭,後跟camelCase,類名以大寫字母開頭,後跟camelCase,你應該用英文而不是德文編程。 – haisi 2014-10-09 09:47:45

+0

第49行在main_controller.Java中。謝謝我解決問題時會這樣做 – lukas22497 2014-10-09 10:26:58

+0

我知道它在main_controller中,但是在你給我們的代碼中,第49行是空的! – haisi 2014-10-09 10:43:36

回答

1

我的第一個猜測是TableView中的名稱在FXML中不匹配文件和控制器類。目前你已經將它定義爲

@FXML 
TableView<einheiten_table> einheitenTable; 

,並再次我想這應該根據自己的命名方法:)
請FXML文件檢查fx:id

@FXML 
private TableView<einheiten_table> Einheiten_table; 

+0

你是對的,它現在正在啓動。感謝那!! :)但是我在可觀察List中寫的東西並不出現在tableview中。必須有更多的東西.. 看起來像這樣:http://s14.directupload.net/images/141009/zlyd99wq.png 它不說沒有內容,但我不能看到內容。 – lukas22497 2014-10-09 11:18:05

+0

@LukasMüller,這是因爲你的模型類「einheiten_table」不遵循JavaFX(以及Java的)Javabeans結構。請閱讀Javabean的命名約定,例如必須如何寫入getters/setters方法名稱。 – 2014-10-09 11:26:50

+0

@LukasMüller。繼[Oracle的tableview教程](http://docs.oracle.com/javafx/2/ui_controls/table-view.htm)將是一個好的開始。 – 2014-10-09 11:28:56