2012-01-08 15 views
8

Estoy usando SwingWorker para ejecutar algunas tareas de carga pesada en una aplicación que estoy realizando. Aunque hoy en día llegué a través de la clase Ejecutor y este ejemplo:Diferencias entre SwingWorker y Executor

Executors.newCachedThreadPool().execute(new Runnable() { 
        public void run() { 
         someTask();  
    }); 

Puede alguien explicar las razones por las que se podría usar en lugar de SwingWorker el ejemplo anterior? Esta es la forma en que actualmente estoy usando SwingWorker:

SwingWorker worker = new SwingWorker() {    
protected Object doInBackground() { 
    someTask(); 
return null; 
} 
}; 
worker.execute(); 
+0

Comprobar [API] (http://docs.oracle.com/ javase/7/docs/api/javax/swing/SwingWorker.html) y verá que SwingWorker implementa la interfaz Future (y Runnable), que se devuelve desde el método 'submit (...)' de ExecutorService. Se ha creado un SwingWorker para interactuar bien con el hilo del evento Swing. –

Respuesta

7

1) SwingWorker se crea como intermediarios puente Java Essentials Classes y Swing de implementos Future y garantía bastante que outoput de métodos process, publish y done se encontrarán en EventDispatchThread

2) puede invocar SwingWorker de Executor, esto es la mayoría de los métodos más seguros cómo crear multithreading in Swing por instrumentos SwingWorker

3) fíjate bien con el número o el hilo, porque Executor no le importa someho w sobre SwingWorkers life_cycle

4) otra importante notice y here

5) para los estados de escucha de SwingWorker hay que implementa PropertyChangeListener

5

El SwingWorker tiene métodos adicionales process() y done() que se ejecuta automáticamente en el hilo de distribución de eventos. Esto es útil si planea mostrar su progreso o resultados finales en una interfaz de usuario.