1 回答

TA貢獻1906條經(jīng)驗 獲得超3個贊
修復(fù)了它 - 有兩個原因?qū)е滤黄鹱饔茫?/p>
設(shè)置表的模型 (
myTable.setModel(new DefaultTableModel(...add info here...));
) 和創(chuàng)建列也必須在主/UI 線程上完成。process
在調(diào)用后看似隨機的時間點被調(diào)用publish()
,并且無法事先知道將有多少塊(可能只是其中一個或全部),因此您必須確保在設(shè)置DefaultTableModel
后獲得列。publish()
為了保證這一點,要么在第一次調(diào)用之前設(shè)置列(但仍在外部doInBackground
- 請參閱 1.),要么調(diào)用publish
“第零次”時間來設(shè)置它們(請參閱下面的代碼)。事后看來,這似乎很明顯......
如果您像我一樣使用SwingWorker
,您可以執(zhí)行以下操作:
DefaultTableModel dtm123;
@Override
protected void process(List<Integer> chunks) {
if(chunks!=null) {
ListIterator<Integer> li = chunks.listIterator();
int next;
while(li.hasNext()) {
next = li.next();
if(next==-1) {
//Set up columns/column titles here
myTable.setModel(new DefaultTableModel(
new Object[][] {},
columnHeaderArray
));
dtm123 = (DefaultTableModel) myTable.getModel();
} else {
//Add new rows here
dtm123.addRow(myDataList.get(next).getRowArray());
}
}
}
}
像往常一樣使用publish,但一旦您知道列的標(biāo)題,請調(diào)用publish(-1)以設(shè)置它們(當(dāng)然,在添加行之前)。
添加回答
舉報