2013-05-03 96 views
-2

我有兩個JFrame實例。主框架具有從數據庫中的數據填充到表,另一種是jFrame2而用戶添加或從主框架更新記錄表將自動刷新JTable不會刷新..我得到一個java.lang空指針異常

這裏是我的主框架代碼的代碼:

public void fillTable(){ 

String sql = "SELECT ID, UniqueCode, Name, Age, Gender, Cell FROM info"; 
try{ 

    pst = conn.prepareStatement(sql); 
    rs = pst.executeQuery(); 
    jTable1.setModel(DbUtils.resultSetToTableModel(rs)); 

    jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

    jTable1.getColumnModel().getColumn(0).setPreferredWidth(60); 
    jTable1.getColumnModel().getColumn(1).setPreferredWidth(250); 
    jTable1.getColumnModel().getColumn(2).setPreferredWidth(100); 
    jTable1.getColumnModel().getColumn(3).setPreferredWidth(60); 
    jTable1.getColumnModel().getColumn(4).setPreferredWidth(60); 
    jTable1.getColumnModel().getColumn(5).setPreferredWidth(92); 

} 
catch (Exception e){ 
    JOptionPane.showMessageDialog(null, e); 
} 
} 

,這裏是我的框架代碼2

private void save(){ 
    try{ 
     if(name.getText().isEmpty() || age.getText().isEmpty() || cell.getText().isEmpty()){ 
      JOptionPane.showMessageDialog(null, "Empty Fields Are Not Allowed", "System Message", JOptionPane.WARNING_MESSAGE); 
     } 
     else if(" ".equals(cmbGender.getSelectedItem())){ 
      JOptionPane.showMessageDialog(null, "Empty Fields Are Not Allowed", "System Message", JOptionPane.WARNING_MESSAGE); 
     } 
     else{ 
      connect = mysqlconnect.DBConnect(); 
      stmt = connect.createStatement(); 
      rs = stmt.executeQuery("SELECT Name FROM info WHERE Name='" + name.getText() + "'"); 

      if(rs.first()){ 
       JOptionPane.showMessageDialog(null, "Name already Exist, Duplicate info is not allowed", "System Message", JOptionPane.WARNING_MESSAGE); 

      }else{ 
       sql = "INSERT INTO info(UniqueCode, Name, Age, Gender, Cell) values ('" + uniqueID.getText()+ "', '" + name.getText() + "', '" + age.getText() + "', " + 
        " '" + cmbGender.getSelectedItem() + "', '" + cell.getText() + "') "; 

       Statement st = connect.createStatement(); 
       st.executeUpdate(sql); 

       JOptionPane.showMessageDialog(null, "Successfully Saved", "System  Message", JOptionPane.INFORMATION_MESSAGE); 

      this.dispose(); 
      frame.jTable1.repaint(); <====== Error comes here because i want to    refresh my table 
      } 
     } 
    } 
    catch(Exception ex){ 
     System.out.println(ex); 
    } 
+2

1)爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 2)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) – 2013-05-03 13:28:08

+1

拋出NullPointerException的位置在哪裏?你應該提供更多的細節。 – Kai 2013-05-03 13:29:51

+1

請勿使用多個「JFrames」。發佈例外,以便我們能夠弄清楚什麼是錯的。 – Amarnath 2013-05-03 13:44:39

回答

0

幽州這條線會導致您的NPE:

frame.jTable1.repaint(); 

然後,frame或frame.jTable1爲null。上述行更改爲:

System.out.println("frame == null: " + (frame == null)); 
System.out.println("frame.jTable1 == null: " + (frame.jTable1 == null));  
frame.jTable1.repaint(); 

你會發現再經過哪些變量爲null,追溯在你的代碼,看到你沒有初始化。

請注意,您不應該在JTable上調用repaint(),這樣不會「刷新」數據或執行任何類型的操作。相反,您需要更改JTable模型保存的數據,這在我的發佈代碼中看不到。

+0

您能否告訴我代碼將如何更新我的JTable – 2013-05-06 10:45:19

+0

@JCIlagan:再次,您將更新或替換JTable的模型。你怎麼做取決於你的程序是如何設置的。 Swing JTable教程告訴你如何使用表模型,所以你可能想給他們一個研究。 – 2013-05-06 18:07:25

+0

而不是repaint你可以使用fireTableDataChanged(); – Neo 2013-05-22 17:30:41