错误:java.lang.NullPointerException(jtable)

时间:2014-09-18 17:09:59

标签: java mysql swing

在使用MySQL的内容填充JTable时出现问题。 首先,它在我在控制台(system.out)上输出表的内容时起作用。 错误:当我尝试在JTable上显示时发生NullPointerException。

代码:

import javax.swing.table.DefaultTableModel;
import java.sql.*;
import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils;

public class ProductTable extends javax.swing.JFrame {

public ProductTable() {

     try{
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/inventory_db","root","");

     }catch(Exception ex){
        System.out.println("Error: "+ex);
     }    
     try{
       String query = "SELECT * FROM items_in_hand";
       st = con.prepareStatement(query);
       rs = st.executeQuery(query);
       System.out.println("Records from Inventory Database:");
       itemTable.setModel(DbUtils.resultSetToTableModel(rs)); //this line here causes the error
       while(rs.next()){

            String iname = rs.getString("ItemName");
            String price = rs.getString("Price");
            String qty = rs.getString("Quantity");
            System.out.println("Item: "+ iname +"  Price (each): "+price+"  Quantity: "+qty);
       }       
    }
    catch(Exception ex){
         System.out.println("Error: "+ ex);
    }    
    initComponents();     // i have long initComponent codes;
}


private void btn_addActionPerformed(java.awt.event.ActionEvent evt) {                                        
    message.setText("");  
    message2.setText("");
    DefaultTableModel model = (DefaultTableModel) itemTable.getModel();
    if(!txt_item.getText().trim().equals("")){
        try{
            String sql = "INSERT INTO items_in_hand (ItemName, Price, Quantity) VALUES (?,?,?)";
            st = con.prepareStatement(sql);
            st.setString(1,txt_item.getText());         
            st.setString(2,txt_price.getText());  
            st.setString(3,txt_quantity.getText());
            st.execute();
            JOptionPane.showMessageDialog(null , "Saved.");
            model.addRow(new Object[] {txt_item.getText(),txt_price.getText(),txt_quantity.getText()});
            message2.setText("Successfully Added.");
        }catch(Exception ex){
            JOptionPane.showMessageDialog(null , ex);
        }  
    }
    else{
        message.setText("The Item name must be provided.");
    }
}                                                               



public static void main(String args[]) {

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new ProductTable().setVisible(true);
        }
    });
}

private Connection con;
private PreparedStatement st = null;
private ResultSet rs; 
}    

运行: 库存数据库中的记录: 错误:java.lang.NullPointerException

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

执行new ProductTable().setVisible(true);后,您的构造函数被调用并执行从db获取数据的逻辑和

当你执行itemTable.setModel();时,itemTable为null,因为你没有初始化它,我相信你在initComponents();方法中做了以后调用