2016-06-01 52 views
0

我有一個按鈕,它只是讀取數據庫表中的所有字段(select * from movies),所以我使用AbstractTableModel。第一個表用這個類閱讀OK,但是如果我爲其他表執行AbstractTableModel,我得到了NPE。AbstractTableModel中的NullPointerException getRowCount

這裏是我的代碼TableModelForMovies:在我的按鈕

package ua.movies.movie; 

import java.util.ArrayList; 
import java.util.List; 

import javax.swing.table.AbstractTableModel; 

public class TableModelForMovies extends AbstractTableModel { 

    private static final int NAME_COL = 0; 
    private static final int Genre_COL = 1; 
    private static final int Release_Date = 2; 
    private static final int Unique = 3; 

    private String[] columnNames = { "name", "genre", 
    "release" , "dgdggdf" }; 

    private List<Movie> movies; 

    public TableModelForMovies(List<Movie> theMovie) { 
     movies = theMovie; 
    } 

    @Override 
    public int getRowCount() { 
     return movies.size(); <<- here is problem 
    } 

    @Override 
    public int getColumnCount() { 
     return columnNames.length; 
    } 

    @Override 
    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     Movie tmpMovie = movies.get(rowIndex); 
     switch (columnIndex) { 
     case NAME_COL: 
      return tmpMovie.getMovieName(); 
     case Genre_COL: 
      return tmpMovie.getGenre();  
     case Release_Date: 
      return tmpMovie.getRelease(); 
     case Unique: 
      return tmpMovie.getUniqueKey(); 

     default: 
      return tmpMovie.getMovieName(); 
     } 
    } 
} 

和監聽

try { 
    String movieName = textFindField.getText(); 
    List<Movie> employees = null; 
    if (movieName != null && movieName.trim().length() > 0) { 
     //employees = movieDao.search(lastName); 
     employees = movieDao.getAllMovies(); 
    } else { 
     searchByName(); 
    } 

    // create the model and update the "table" 
    TableModelForMovies model = new TableModelForMovies(employees); 

    tableMovies.setModel(model); 
} catch (Exception exc) { 
    JOptionPane.showMessageDialog(AppMovies.this, "Error: " + exc, "Error", JOptionPane.ERROR_MESSAGE); 
} 

我真的不明白,爲什麼我得到了NPE。因爲我有第二課,它也延伸AbstractTableModel並且沒有任何錯誤,NPE就在這裏。

+1

與員工發生了什麼對象,如果沒有電影名稱? – paisanco

+0

@paisanco,是的,我忘了調用方法,它會輸出我們所有的表格,在另一種情況下,我們可以找到名稱,但NPE在類表模型 –

+0

1)源代碼中的一個空白行空白全部是*永遠*需要。 '{'之後或'}'之前的空行通常也是多餘的。 2)以小寫字母輸入的單詞難以閱讀,比如試圖聽別人嘟someone。請在句子的開頭使用大寫字母,單詞I以及諸如'ArrayList'或Oracle的專有名稱。 3)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。硬編碼一些數據來替換數據庫。 –

回答

0

它可能有可能的是,被初始化movies列表之前getRowCount()方法被調用,當你將覆蓋getRowCount()方法,請使用以下模式:

@Override 
    public int getRowCount() 
    { 
    int result = 0; 
    synchronized(LOCK) { 
     if(movies != null) { 
     result = movies.size(); 
     } // if 
    } // synchronized 
    return result; 
    } 
+0

好吧,非常感謝你,我不使用你的方法,我在我的班級中與getter和setter錯誤,現在它工作,但謝謝) –

相關問題