0

我在 setModel 到 jTable 时遇到了很大的问题。我有良好的 sql 连接,工作正常。

这是 JFrame 的构造函数:

public class MainPanel extends javax.swing.JFrame {

private String selectedId;
private DBConn db;
public Vector<String> header;
public Vector<Vector<String>> data;


/**
 * Creates new form MainPanel
 */
public MainPanel() {

    db = new DBConn();

    selectedId = "nothing";
    Vector<String> header = new Vector<String>();
    Vector<Vector<String>> data = new Vector<Vector<String>>(db.allFilms()); 
    header.add("ID");
    header.add("Name");
    header.add("Genre");
    header.add("Rating");

    System.out.println(header.get(1)); // this works ok
    System.out.println(data.get(1)); //this works ok too
    initComponents();
}

然后我有函数 initComponents

private void initComponents() {

    jTable2 = new javax.swing.JTable();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    jButton4 = new javax.swing.JButton();
    jButton5 = new javax.swing.JButton();

    jMenu3.setText("jMenu3");

    jMenu4.setText("jMenu4");

    jMenu1.setText("jMenu1");

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    setResizable(false);

    System.out.println(header.get(1)); // this crashed
    jTable2.setFocusable(false);
    jTable2.setOpaque(false);
    jTable2.setRequestFocusEnabled(false);
    jTable2.setModel(new javax.swing.table.DefaultTableModel(
        this.data, this.header
    ));
    jTable2.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jTable2MouseClicked(evt);
        }
    });

但是当我在函数 initComponents 中并且我想从数据或标题中获取数据时,抛出异常(Exception in thread "main" java.lang.NullPointerException)

所以我不能使用setModel。感谢您的任何回答。

4

2 回答 2

1

在您的代码中,我可以看到您正在构造函数中创建变量的本地实例:

 Vector<String> header = new Vector<String>();
 Vector<Vector<String>> data = new Vector<Vector<String>>(db.allFilms()); 

虽然你必须初始化你的实例变量,所以不需要再次声明:

this.header = new Vector<String>();
this.data = new Vector<Vector<String>>(db.allFilms()); 

如果您创建新变量并为其赋值,您的实例变量将保持为空,这就是您收到空指针异常的原因。此致。

于 2013-06-05T16:46:10.747 回答
-1

在构造函数中尝试 this.data=... 和 this.header=... 。你这样做的方式,你只是初始化局部变量,所以你的类变量保持为空。

于 2013-06-05T16:51:21.290 回答