【发布时间】:2012-03-22 18:49:24
【问题描述】:
我怎样才能阻止SwingWorker 做他的工作?我知道有 cancel() 方法可以做到这一点,但我能做的最多就是匿名创建一个新的 SwingWorker 来完成这项工作。
下面是代码供参考:
public void mostrarResultado(final ResultSet resultado) {
new SwingWorker<Void, Object[]>() {
@Override
public Void doInBackground() {
// TODO: Process ResultSet and create Rows. Call publish() for every N rows created.+
DefaultTableModel modelo = new DefaultTableModel();
jTableResultados.removeAll();
int columnas;
int res = 0;
try {
ResultSetMetaData metadata = resultado.getMetaData();
columnas = metadata.getColumnCount();
Object[] etiquetas = new Object[columnas];
jProgressBar.setIndeterminate(true);
for (int i = 0; i < columnas; i++) {
etiquetas[i] =
metadata.getColumnName(i + 1);
}
modelo.setColumnIdentifiers(etiquetas);
jTableResultados.setModel(modelo);
while (resultado.next() && !this.isCancelled()) {
res++;
Object fila[] = new Object[columnas];
for (int i = 0; i < columnas; i++) {
fila[i] = resultado.getObject(i + 1);
}
modelo.addRow(fila);
publish(fila);
}
jProgressBar.setIndeterminate(false);
if (res == 0) {
JOptionPane.showMessageDialog(jPanelClientes.getParent(), "No se encontraron resultados con los criterios de búsqueda definidos", "Sin resultados", JOptionPane.INFORMATION_MESSAGE);
}
} catch (SQLException ex) {
LOG.log(Level.SEVERE, "Excepcion: ", ex);
JOptionPane.showMessageDialog(jPanelClientes.getParent(), "Error en al ejecutar la busqueda seleccionada", "Error", JOptionPane.ERROR_MESSAGE);
}
return null;
}
}.execute();
}
实际上,这项工作做得很好并且发布时没有任何问题,但鉴于我使用数据库,可能会发生查询有太多结果并且完全发布所花费的时间需要一些时间,因此用户必须能够取消任务并运行新任务。
显然,worker 与取消按钮事件的方法不同,因此我将无法调用 Worker cancel() 方法。
尝试以这种方式使工作者成为该类的属性,但没有运气:
public class myClass extends javax.swing.JFrame {
private SwingWorker<Void, Object[]> tarea;
但是当我去的时候:
tarea = new SwingWorker<Void,Object[]>(){...}
我得到不兼容的类型,发现无效,需要 SwingWorker,我完全没有想法。
有什么建议吗?
谢谢
【问题讨论】:
-
确实可能重复,可惜搜索没有弹出那个答案:/
-
@Lowb 可能重复,是的,我们不介意读者,没有人知道您的其余代码中发生了什么,因为您的 SwingWorkers 代码不正确,请在此处查看我的答案,以便更好请尽快帮助您编辑您的帖子SSCCE
-
我的意思是,我没有在搜索中看到那个答案,是的,那些解决了我的问题,这就是为什么我说它是重复的。对不起,如果我不够清楚。
标签: java swing swingworker