【发布时间】:2009-10-26 13:07:58
【问题描述】:
我正在编写自己的 JMS 浏览器,我对来自 JMS 服务器的消息的 JTable 更新感到震惊。 我已经尝试 下面的 logis 有效,但它不是实时更新,这意味着我想显示添加到的每一行Jtable 从 QueueBrowser 添加到 LinkedList 时立即。AbstractTableModelTableModelListener 在将数据添加到 LinkedList 时使 Jtable 刷新。
我已根据以下建议更新了代码。
我做错了吗?谁能帮帮我?
QueueBrowser qb = session.createBrowser(q);
MsgTable mt = (MsgTable) queueTable.getModel();
mt.load(qb.getEnumeration(),mt);
qb.close();
class MsgTable extends AbstractTableModel implements TableModelListener{
final String[] columnNames = { "#", "Timestamp", "Type", "Mode",
"Priority" };
public void setRowSize(){
}
LinkedList queueList = new LinkedList();
public int getRowCount() { if (queueList == null) { return 0; } else { return queueList.size();}}
public int getColumnCount() { return columnNames.length;}
public String getColumnName(int column) {return columnNames[column];}
public Object getValueAt(int row, int column) {
if(queueList == null){
return null;
}
Message m = (Message) queueList.get(row);
...
}
void load(Enumeration e,MsgTable mt) {
mt.addTableModelListener(this);
while(e.hasMoreElements()){
queueList.add(e.nextElement());
}
fireTableDataChanged();
}
Message getMessageAtRow(int row) {
if (queueList == null)
return null;
return ((Message) queueList.get(row));
}
@Override
public void tableChanged(TableModelEvent arg0) {
// TODO Auto-generated method stub
fireTableDataChanged();
}
}
并得到这个异常。
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at javax.swing.table.AbstractTableModel.fireTableRowsInserted(Unknown Source)
错了吗?
【问题讨论】:
-
除了一些明显的性能问题,理论上代码看起来还可以。你的实际问题是什么?
-
@jambjo ,它工作正常,但是 Jtable 在列表获取所有数据时显示数据,而不是在添加到 LinkiedList 时显示实时刷新