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