簡體   English   中英

JTable setModel無法訪問實例變量

[英]JTable setModel cant acces to instance variables

我有一個很大的問題,用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。 感謝您的任何答復。

在您的代碼中,我可以看到您正在構造函數中創建變量的本地實例:

 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()); 

如果創建新變量並為其分配值,則實例變量將保持為空,這就是為什么您會得到空指針異常的原因。 最好的祝福。

在構造函數中嘗試this.data = ...和this.header =...。 這樣做的方式只是初始化局部變量,因此您的類變量保持為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM