Java 数据库数据不存在';不能填入JTable
这段代码我已经写了好几天了。我在数据库上的过程工作正常,但无法填充到表中。我一次又一次地检查代码,但我找不到有什么问题。。。我得到的错误是:JavaNullPointerException,涉及的行是返回Java 数据库数据不存在';不能填入JTable,java,swing,jtable,nullpointerexception,abstracttablemodel,Java,Swing,Jtable,Nullpointerexception,Abstracttablemodel,这段代码我已经写了好几天了。我在数据库上的过程工作正常,但无法填充到表中。我一次又一次地检查代码,但我找不到有什么问题。。。我得到的错误是:JavaNullPointerException,涉及的行是返回notes.length的代码段。这是我的一段代码: private Object[][] notes = null; setUpStatusColumn(noteTable, noteTable.getColumnModel().getColumn(2)); protected JTable
notes.length
的代码段。这是我的一段代码:
private Object[][] notes = null;
setUpStatusColumn(noteTable, noteTable.getColumnModel().getColumn(2));
protected JTable createTable(GradesModel gradesModel) {
return new JTable(gradesModel);
}
public void setUpStatusColumn(JTable table, TableColumn statusColumn) {
statusCombo = new JComboBox();
statusCombo.addItem("OTOCLOSED");
statusCombo.addItem("INPROGRESS");
statusCombo.addItem("OPEN");
statusCombo.addItem("CLOSED");
statusColumn.setCellEditor(new DefaultCellEditor(statusCombo));
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click to select Note Status");
statusColumn.setCellRenderer(renderer);
}
private class GradesModel extends AbstractTableModel {
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
notes[rowIndex][columnIndex] = aValue;
fireTableCellUpdated(rowIndex, columnIndex);
}
public void addTableModelListener(TableModelListener l) {
}
public void removeTableModelListener(TableModelListener l) {
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0 || columnIndex == 1 || columnIndex == 4 || columnIndex == 5)
return false;
else
return true;
}
public Class<?> getColumnClass(int col) {
switch (col) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
return String.class;
}
throw new AssertionError("invalid column");
}
public int getRowCount() {
return notes.length;
}
public int getColumnCount() {
return 6;
}
public String getColumnName(int col) {
switch (col) {
case 0:
return "ETT Date";
case 1:
return "Control Name";
case 2:
return "Note Status Type";
case 3:
return "Note Log Desc";
case 4:
return "Note Log Date Time";
case 5:
return "Update/Insert";
}
throw new AssertionError("invalid column");
}
public Object getValueAt(int row, int col) {
for (int i = 0; i < 6; i++) {
if (col == i)
return notes[row][col];
}
throw new AssertionError("invalid column");
}
}
public void getTableData() throws Exception {
Vector<AlarmLog> alarmLog = null;
alarmLog = RepositoryHandler.getGlobalRepository().getAlarmLog(
alarmId);
notes = new Object[alarmLog.size() ][5];
java.util.Iterator<AlarmLog> ite = alarmLog.iterator();
int i = 0;
GradesModel myModel=(GradesModel)noteTable.getModel();
while(ite.hasNext()){
AlarmLog aLog = ite.next();
myModel.setValueAt(aLog.getEttDate(), i, 0);
myModel.setValueAt(aLog.getControlName(), i, 1);
myModel.setValueAt(aLog.getAlarmStatusType(), i, 2);
myModel.setValueAt(aLog.getAlarmLogDesc(), i, 3);
myModel.setValueAt(aLog.getAlarmLogDateTime(), i, 4);
myModel.setValueAt(1, i, 5);
i++;
}
// fill table code
noteTable.repaint();
//setModel
}
public void getDataFromTable() {
int columnCount = noteTable.getModel().getColumnCount();
int rowCount = noteTable.getModel().getRowCount();
Object[][] objArray = new Object[rowCount][columnCount];
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {
objArray[i][j] = noteTable.getModel().getValueAt(i, j);
}
}
}
private Object[]notes=null;
setUpStatusColumn(noteTable,noteTable.getColumnModel().getColumn(2));
受保护的JTable createTable(GradesModel GradesModel){
返回新的JTable(gradesModel);
}
公共无效设置状态列(JTable表格、TableColumn状态列){
statusCombo=新的JComboBox();
statusCombo.addItem(“已关闭”);
statusCombo.addItem(“INPROGRESS”);
statusCombo.addItem(“打开”);
statusCombo.addItem(“已关闭”);
statusColumn.setCellEditor(新的DefaultCellEditor(statusCombo));
DefaultTableCellRenderer=新建DefaultTableCellRenderer();
renderer.setToolTipText(“单击以选择注释状态”);
statusColumn.setCellRenderer(渲染器);
}
私有类GradesModel扩展了AbstractTableModel{
public void setValueAt(对象有效、int行索引、int列索引){
附注[rowIndex][columnIndex]=aValue;
fireTableCellUpdated(行索引、列索引);
}
公共void addTableModelListener(TableModelListener l){
}
公共void removeTableModelListener(TableModelListener l){
}
公共布尔值isCellEditable(int-rowIndex、int-columnIndex){
如果(columnIndex==0 | | columnIndex==1 | | columnIndex==4 | | columnIndex==5)
返回false;
其他的
返回true;
}
公共类getColumnClass(int-col){
开关(col){
案例0:
案例1:
案例2:
案例3:
案例4:
案例5:
返回字符串.class;
}
抛出新的断言错误(“无效列”);
}
public int getRowCount(){
返回注释。长度;
}
public int getColumnCount(){
返回6;
}
公共字符串getColumnName(int-col){
开关(col){
案例0:
返回“ETT日期”;
案例1:
返回“控件名”;
案例2:
返回“票据状态类型”;
案例3:
返回“Note Log Desc”;
案例4:
返回“备注日志日期时间”;
案例5:
返回“更新/插入”;
}
抛出新的断言错误(“无效列”);
}
公共对象getValueAt(整数行,整数列){
对于(int i=0;i<6;i++){
if(col==i)
返回注释[行][col];
}
抛出新的断言错误(“无效列”);
}
}
public void getTableData()引发异常{
向量alarmLog=null;
alarmLog=RepositoryHandler.getGlobalRepository().getAlarmLog(
报警ID);
notes=新对象[alarmLog.size()][5];
java.util.Iterator ite=alarmLog.Iterator();
int i=0;
GradesModel myModel=(GradesModel)noteTable.getModel();
while(ite.hasNext()){
AlarmLog aLog=ite.next();
myModel.setValueAt(aLog.getEttDate(),i,0);
myModel.setValueAt(aLog.getControlName(),i,1);
myModel.setValueAt(aLog.getAlarmStatusType(),i,2);
myModel.setValueAt(aLog.getAlarmLogDesc(),i,3);
myModel.setValueAt(aLog.getAlarmLogDateTime(),i,4);
myModel.setValueAt(1,i,5);
i++;
}
//填充表代码
noteTable.repaint();
//集合模型
}
public void getDataFromTable(){
int columnCount=noteTable.getModel().getColumnCount();
int rowCount=noteTable.getModel().getRowCount();
Object[]objArray=新对象[rowCount][columnCount];
对于(int i=0;i
您缺少将新数据添加到JTable
的方法setValueAt()
,该方法应该快速修改。您的方法public void getTableData()引发异常{
1) 不要在EDT上运行冗长的代码,因为SwingGUI会等待所有方法的完成
2) 我建议使用DefaultTableModel
代替…,然后您忘记了AbstractTableModel
3) 您的AbstractTableModel
必须包含正确的fireXxxXxx
方法,而不是noteTable.repaint();
4) 我看到了另一个…,但是通过使用DefaultTableModel
您永远无法解决这个问题,因为这些方法是默认实现的
5) 我担心您在运行时用它的模型重新创建JTable您错过了将新数据添加到
JTable
的方法setValueAt()
,该方法应该被快速修改您的方法public void getTableData()抛出异常{
1) 不要在EDT上运行冗长的代码,因为SwingGUI会等待所有方法的完成
2) 我建议使用DefaultTableModel
代替…,然后您忘记了AbstractTableModel
3) 您的AbstractTableModel
必须包含正确的fireXxxXxx
方法,而不是noteTable.repaint();
4) 我看到了另一个…,但是通过使用DefaultTableModel
您永远无法解决这个问题,因为这些方法是默认实现的
5) 恐怕您用I重新创建了JTable