2013-06-05 3 views
0

swing에서 jTable에 setModel에 큰 문제가 있습니다. 나는 좋은 SQL 연결이 잘 작동합니다.JTable setModel 인스턴스 변수에 액세스 할 수 없습니다.

이 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에있어 때 내가 데이터 또는 헤더로부터 데이터를 얻으려면 예외가 throw됩니다 (Exception in thread "main" java.lang.NullPointerException)

그래서 저는 setModel을 사용할 수 없습니다. 어떤 답변을 주셔서 감사합니다. 코드에서

+0

이유가 없습니다 this.data, this.header, 이것은 로컬 변수입니다 ... 이유가 아닙니다. 물론 아무도 whats returns (db.allFilms())를 반환하지 않습니다. – mKorbel

답변

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

새 변수를 만들고 값을 할당하면 인스턴스 변수가 비어 있으므로 null 포인터 예외가 발생합니다. 친애하는.

+0

고마워, 어리석은 실수 :) 마르셀로 대단히 감사합니다 :) –

+0

문제가없는 동료, 때로는 우리 모두에게 일어날 수 있으므로, 걱정하지 마시고, 기쁘게 생각합니다. –

-1

생성자에서 this.data = ... 및 this.header = ...를 시도하십시오. 네가 한 것처럼, 지역 변수를 초기화하는 중이므로 클래스 변수는 null로 남는다.

관련 문제