Estoy intentando utilizar un SwingWorker para llevar a cabo una tarea larga y actualizar un JLabel con el resultado:Java GUI Congela incluso con SwingWorker
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
return doCalculation();
}
protected void done() {
try {
label.setText(get());
} catch (InterruptedException e) {
System.out.println("thread was interrupted");
} catch (ExecutionException e) {
System.out.println("there was an ExecutionException");
}
}
}.execute();
}
});
puedo hacer clic en el botón tantas veces como me gusta y el Gui seguirá siendo receptivo hasta que se terminen dos hilos, en cuyo punto el Gui se congela mientras se están ejecutando los hilos. Si solo ejecuto un hilo a la vez, este problema aún ocurre.
Estaría encantado si alguien pudiera indicarme si estoy utilizando el SwingWorker incorrectamente o si hay otro problema que desconozco. Gracias por tu tiempo. Ian
Editar
El doCalculation() es sólo algo que consume tiempo:
private String doCalculation() {
for (int i = 0; i < 10000000; i++) {
Math.pow(3.14, i);
}
return threads++ + "";
}
No veo nada obviamente mal con el código que ha publicado hasta ahora, pero creo que la clave aquí es qué está sucediendo en el método 'doCalculation();'. ¿Puedes publicar este código? –