SwingWorker
para realizar el cálculo en un subproceso trabajador. La GUI también proporciona un conjunto
separado de componentes que obtienen el siguiente número de Fibonacci en secuencia con cada clic de un botón,
empezando con
fibonacci(1)
. Este conjunto de componentes realiza su cálculo corto directamente en el subpro-
ceso de despachamiento de eventos.
La clase
CalculadoraSegundoPlano
(fi gura 23.25) realiza el cálculo recursivo de Fibonacci en un subpro-
ceso trabajador. Esta clase extiende a
SwingWorker
(línea 8), sobrescribiendo a los métodos
doInBackground
y
done
. El método
doInBackground
(líneas 21 a 25) calcula el
n-ésimo número de Fibonacci en un subproceso
trabajador y devuelve el resultado. El método
done
(líneas 28 a 44) muestra el resultado en un objeto
JLabel
.
Método
Descripción
doInBackground
Defi ne un cálculo extenso y se llama desde un subproceso trabajador.
done
Se ejecuta en el subproceso de despachamiento de eventos, cuando
doInBackground
regresa.
execute
Programa el objeto
SwingWorker
para que se ejecute en un subproceso trabajador.
get
Espera a que se complete el cálculo, y después devuelve el resultado del mismo (es decir, el valor
de retorno de
doInBackground
).
publish
Envía resultados inmediatos del método
doInBackground
al método
process
, para procesarlos
en el subproceso de despachamiento de eventos.
process
Recibe los resultados intermedios del método
publish
y los procesa en el subproceso de despa-
chamiento de eventos.
setProgress
Establece la propiedad de progreso para notifi car a cualquier componente de escucha de cambio
de propiedades que esté en el subproceso de despachamiento de eventos, acerca de las actualiza-
ciones en la barra de progreso.
Figura 23.24
| Métodos de uso común de
SwingWorker
.
1
// Fig. 23.25: CalculadoraSegundoPlano.java
2
// Subclase de SwingWorker para calcular números de Fibonacci
3
// en un subproceso en segundo plano.
4
import
javax.swing.SwingWorker;
5
import
javax.swing.JLabel;
6
import
java.util.concurrent.ExecutionException;
7
8
public class
CalculadoraSegundoPlano
extends
SwingWorker< String, Object >
9
{
10
private final int
n;
// número de Fibonacci a calcular
11
private final
JLabel resultadoJLabel;
// JLabel para mostrar el resultado
12
13
// constructor
14
public
CalculadoraSegundoPlano(
int
numero, JLabel etiqueta )
15
{
16
n = numero;
17
resultadoJLabel = etiqueta;
18
}
// fin del constructor de CalculadoraSegundoPlano
19
20
// código que tarda mucho en ejecutarse, para ejecutarlo en un subproceso trabajador
21
public
String doInBackground()
22
{
23
long
nesimoFib = fibonacci( n );
Figura 23.25
| Subclase de
SwingWorker
para calcular números de Fibonacci en un subproceso en segundo plano.
(Parte 1 de 2).
23.11 Subprocesamiento múltiple con GUIs
971
23_MAQ_CAP_23_DEITEL.indd971
4/19/081:33:56AM