2017-08-08 162 views
0

我試圖填充我的TableView從我的數據庫的一些數據。但它給了我一個空指針異常!請指教我,我做錯了什麼。這是我第一次使用TableView。了JavaFx的TableView沒有得到數據

當我打印行,我可以看到輸出。但是當我做data.add(row)時,這會產生一個空指針異常。

數據= table.getItems();這樣做會給出一個帶有單元格但沒有數據的空白表格。

private TableView<ObservableList<String>> table; 
 
    
 
    private ObservableList<ObservableList<String>> data ; 
 
    
 
    String query; 
 
    PreparedStatement statement; 
 
    ResultSet rs; 
 
    FileInputStream fin; 
 
    
 
    /** 
 
    * Initializes the controller class. 
 
    */ 
 
    @Override 
 
    public void initialize(URL url, ResourceBundle rb) 
 
    { 
 
     try 
 
     { 
 
      prepareAdmin(); 
 
      query = "SELECT u.id , u.username , d.score " 
 
        + " FROM user AS u INNER JOIN " 
 
        + " userDetails as d ON u.id = d.userId "; 
 
      statement = Database.conn.prepareStatement(query); 
 
      rs = statement.executeQuery(); 
 
      for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++) 
 
      { 
 
       final int j = i;     
 
       TableColumn<ObservableList<String>, String> col = new TableColumn<>(rs.getMetaData().getColumnName(i+1)); 
 
       table.getColumns().addAll(col); 
 
       System.out.println("Column ["+i+"] "); 
 
      } 
 
      while(rs.next()){ 
 
       ObservableList<String> row = FXCollections.observableArrayList(); 
 
       for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){ 
 
        row.add(rs.getString(i)); 
 
        System.out.println(rs.getString(i)); 
 
       } 
 
       System.out.println("Row [1] added " + row); 
 
       data.add(row); 
 
       
 
       System.out.println(data); 
 
      } 
 
      
 
      table.setItems(data); 
 
     } 
 
     catch (Exception ex) 
 
     { 
 
      ex.printStackTrace(); 
 
     } 
 
     
 
    }  
 

 

 

 

 

 

 
================================= 
 

 

 
java.lang.NullPointerException 
 
at AdminProfile.AdminProfileController.initialize(AdminProfileController.java:71) 
 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
 
at UserLogin.UserLoginPageController.login(UserLoginPageController.java:95) 
 
at UserLogin.UserLoginPageController.login_btnClicked(UserLoginPageController.java:61) 
 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
at java.lang.reflect.Method.invoke(Method.java:498) 
 
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) 
 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
at java.lang.reflect.Method.invoke(Method.java:498) 
 
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) 
 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) 
 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) 
 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
 
at javafx.event.Event.fireEvent(Event.java:198) 
 
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) 
 
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) 
 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) 
 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 
 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 
 
at java.security.AccessController.doPrivileged(Native Method) 
 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) 
 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 
 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
 
at java.lang.Thread.run(Thread.java:748)

回答

0

好,由我在你的代碼看你有沒有初始化變量數據,所以啊..它是空的,所以你不能使用它的方法..並且那你在做什麼data.add(row);,所以記得要第一initiliaze它。

在另一方面,我相信你沒有實際綁定表,這將與以下行來完成的ObservableList數據: table.setItems(data);

編輯 代表您的疑問,您如果我將其初始化,然後得到一個空白表沒有任何數據 data = FXCollections.observableArrayList();

+0

:這應該初始化數據。 @Camilo –

+0

你還添加我在回答?與它應該做的伎倆寫就行了。 @SifatAhmed – Camilo

+0

是的,我已經做了兩個。即使從stackoverflow檢查其他職位,但無法解決它。 @Camilo –