私はデータベーステーブル(select * from movies)からすべてのフィールドを読み込むボタンしか持っていないので、AbstractTableModel
を使用します。最初のテーブルはこのクラスでOKを読んでいますが、他のテーブルにAbstractTableModel
を実装するとNPEを取得できます。私はNPEを得た理由は、私は本当に理解していないAbstractTableModelのNullPointerException getRowCount
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);
}
私のボタンを
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();
}
}
}
とリスナー:
は、ここに私のコードTableModelForMovies
です。私はセカンドクラスを持っていて、それはまたAbstractTableModel
を拡張しているので、エラーはありません。ここではNPEだけです。あなたがgetRowCount()
メソッドをオーバーライドしているとき
を従業員とどうなり全く映画の名がない場合、オブジェクト? – paisanco
@paisanco、私はメソッドを呼び出すのを忘れてしまったので、私たちのテーブルをすべて出力します。別のケースでは名前で見つけることができますが、TableModelクラスのNPE –
1)ソースコード内の空白の空白行はすべて1つです*これまでに必要なもの。 '{'の前または '}'の前の空白行も通常は冗長です。 2)すべての小文字で書かれた言葉は、混乱している人の話を聞くような、読みにくい。文頭に大文字、Iという単語、 'ArrayList'やOracleなどの適切な名前を使用してください。 3)もっと早い時期に、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。一部のデータをハードコードしてDBに置き換えます。 –