JavaFx TableView 未获取数据

标签 java mysql

我试图用数据库中的一些数据填充我的 TableView。但这给了我一个空指针异常!请告诉我我做错了什么。这是我第一次使用 TableView。

当我打印 row 时,我可以看到输出。但是当我执行 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)

最佳答案

嗯,根据我在你的代码中看到的,你还没有初始化变量数据,所以是的..它是空的,因此你不能在它上面使用方法..这就是你在 中所做的data.add(row);,所以记得先初始化它。

另一方面,我相信您实际上尚未将 ObservableList 数据与表绑定(bind),这可以通过以下行完成: table.setItems(data);

编辑 代表您的疑问,您应该像这样初始化数据: data = FXCollections.observableArrayList();

关于JavaFx TableView 未获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45572994/

相关文章:

java - 在 Spring Boot 中全局启用 CORS

java - Files#write 不适用于 byte[] 和字符集

java - 向 1 个 JButton 添加更多鼠标监听器?

MySql 插入选择 uuid()

mysql - 如何在MYSQL中选择两种组合情况的结果?

C++ mysql 和 boost asio 头冲突

java - 将 Selenium WebDriver 与 Tor 一起使用

java - 如何使用 java 将集合转换为 scala

javascript - PDO准备好的陈述是否足够

php - LEFT JOIN 未输出所需结果