我正在做一个Swing
java程序,它涉及一个工作人员从一个对数据库的查询填充JTable,这很好但是当它完成时,我已经进入了{{1方法检查是否有任何结果处理如下:
done()
但我的问题是结果为零时弹出两次出现,这让我认为 public void done() {
if (isCancelled()) {
jLabelResultados.setText("Procesados " + tablaResultados.getModel().getRowCount() + " resultados.");
return;
}
try {
get();
if (tablaResultados.getModel().getRowCount() == 0) {
JOptionPane.showMessageDialog(jPanelClientes.getParent(), "No se encontraron resultados con los criterios de búsqueda definidos", "Sin resultados", JOptionPane.INFORMATION_MESSAGE);
} else {
jLabelResultados.setText("Encontrados " + tablaResultados.getModel().getRowCount() + " resultados.");
}
} catch (ExecutionException | InterruptedException e) {
LOG.log(Level.SEVERE, "Excepcion", e);
}
}
方法被调用了两次,但我无法找到原因是什么,或者问题是代码。
以下是完整的swingworker代码供参考:
done()
使用时:
private class Worker extends SwingWorker<Void, Object[]> {
private ResultSet resultado;
private JTable tablaResultados;
private DefaultTableModel modelo;
public Worker(ResultSet resultado, JTable tabla) {
this.resultado = resultado;
tablaResultados = tabla;
}
@Override
public Void doInBackground() throws Exception {
ResultSetMetaData metadata = resultado.getMetaData();
int columnas = metadata.getColumnCount();
Object[] etiquetas = new Object[columnas];
for (int i = 0; i < columnas; i++) {
etiquetas[i] =
metadata.getColumnName(i + 1);
}
publish(etiquetas);
while (resultado.next() && !this.isCancelled()) {
Object fila[] = new Object[columnas];
for (int i = 0; i < columnas; i++) {
fila[i] = resultado.getObject(i + 1);
}
publish(fila);
}
return null;
}
@Override
public void process(List<Object[]> chunks) {
if (modelo == null) {
modelo = new DefaultTableModel();
modelo.setColumnIdentifiers(chunks.get(0));
tablaResultados.setModel(modelo);
}
for (int i = 1; i < chunks.size(); i++) {
modelo.addRow(chunks.get(i));
}
}
@Override
public void done() {
if (isCancelled()) {
jLabelResultados.setText("Procesados " + tablaResultados.getModel().getRowCount() + " resultados.");
return;
}
try {
get();
if (tablaResultados.getModel().getRowCount() == 0) {
JOptionPane.showMessageDialog(jPanelClientes.getParent(), "No se encontraron resultados con los criterios de búsqueda definidos", "Sin resultados", JOptionPane.INFORMATION_MESSAGE);
} else {
jLabelResultados.setText("Encontrados " + tablaResultados.getModel().getRowCount() + " resultados.");
}
} catch (ExecutionException | InterruptedException e) {
LOG.log(Level.SEVERE, "Excepcion", e);
}
}
}
有什么想法吗? 谢谢!
答案 0 :(得分:0)
问题解决后,必须对涉及调用创建Worker的方法的代码执行某些操作,按钮上有两个不同的事件,调用创建两个不同Worker的相同方法
通过删除限制性最强的事件来解决。