【发布时间】:2011-01-21 20:33:48
【问题描述】:
我正在尝试创建一个 jTable,一旦单击按钮,它就会一次添加一行,其中只有一个从零开始的数字,然后继续添加行,直到它到达第 1000000 行。我正在使用 SwingWorker 的 doInBackground , publish 和 process 方法来增加行计数器并添加每一行,这意味着在添加行时 gui 不会冻结。然而,当运行时,我可以看到行号在增加,但是它只添加一行并不断更改这一行,即一行被添加到表中,并且它的行号增加,所以我最终得到一行,最后有一个1000000 的数量。下面是我的 SwingWorker 代码,任何 hep 将不胜感激,这个问题让我彻夜难眠!! :/
//inside the button's ActionPerformed method
SwingWorker<Vector, Vector> worker = new SwingWorker<Vector, Vector>() {
@Override
protected Vector doInBackground()
{
int i = 0;
Vector v = new Vector();
//while(!isCancelled())
while(i < 100000000)
{
v.clear();
//v = gen.runAlgorithm2();
v.add(i);
i++;
publish(v);
}
return v;
}
@Override
protected void process(List rowsList)
{
if(rowsList.size() > 0)
{
Vector row = (Vector)rowsList.get(rowsList.size() - 1);
DefaultTableModel tModel = (DefaultTableModel)jTable1.getModel();
//tModel.insertRow(0, row);
tModel.addRow(row);
}
}
};
worker.execute();
【问题讨论】:
标签: java user-interface swing jtable swingworker