Foros del Web » Programación para mayores de 30 ;) » Java »

SwingWorker

Estas en el tema de SwingWorker en el foro de Java en Foros del Web. Buenas, tengo esta funcion public void copiaarchivos(final File archivo_temp, final File ruta_destino){ final SwingWorker worker = new SwingWorker() { protected Void doInBackground() throws Exception {*/ ...
  #1 (permalink)  
Antiguo 09/02/2012, 11:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
SwingWorker

Buenas,

tengo esta funcion



public void copiaarchivos(final File archivo_temp, final File ruta_destino){


final SwingWorker worker = new SwingWorker() {

protected Void doInBackground() throws Exception {*/
try {





InputStream in = new FileInputStream(archivo_temp);
OutputStream out = new FileOutputStream(ruta_destino);

byte[] buf = new byte[1024];
int len;
int count = 0;
while ((len = in.read(buf)) > 0) {

out.write(buf, 0, len);
count +=len;
System.out.println(ruta_destino.toString()+" " +count + " uueee " +tamaño_ficheros);
barraProgress.setValue(count);

}
barraProgress.setValue(0);
in.close();
out.close();


}catch (Exception ex) {
System.out.println(ex);
}
//return null;
}
};
worker.execute();//



va recibiendo argumenos de los archivo que tiene que ir copiando, el problema es que la copia de los archivos me lo hace todos a la vez y lo que yo quiero es que me copie uno y cuando termine me copie otro....
si quitara la clase SwingWorker worker me lo hace como quiero de 1 a 1 no todos a la vez pero claro si no utlizo SwingWorker no me actualiza la barra de progreso.

Saludos
  #2 (permalink)  
Antiguo 09/02/2012, 12:57
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: SwingWorker

Hola:

SwingWorker hace las cosas en un hilo, por lo que cuando llamas a copiaarchivos() se empieza un hilo separado para hacer la copia y la función retorna inmediatamente, aunque no haya acabado el hilo y la copia.

Si estás llamando a esa función en un bucle para varios ficheros, tendrás n hilos lanzados más o menos simultáneamente copiando cada uno un fichero.

¿Por qué usas SwingWorker? Normalmente se usa para devolver el control inmediatamente en una pulsación de teclado o ratón en una ventana Swing. Si es tu caso, lanza el SwingWorker para el bucle de ficheros, no para la copia del fichero.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 09/02/2012, 14:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: SwingWorker

chuidiang,

utlizo SwingWorker para que se vaya actualizando la barra de progreso a medida que copia el fichero.

fijate que dentro del while esta esto barraProgress.setValue(count); y el while esta dentro de la clase SwingWorker .

while ((len = in.read(buf)) > 0) {

out.write(buf, 0, len);
count +=len;
System.out.println(ruta_destino.toString()+" " +count + " uueee " +tamaño_ficheros);
barraProgress.setValue(count);

}

como tendria que hacer entonces si tengo varios hilos pero utilizando la clase SwingWorker no espera a que termine uno para comenzar otro.

saludos
  #4 (permalink)  
Antiguo 09/02/2012, 16:11
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: SwingWorker

Mete el bucle que supongo que tienes dentro del SwingWorker, en vez de poner el bucle fuera y llamar al método que tiene el SwingWorker.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 09/02/2012, 16:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: SwingWorker

chuidiang,

no puedo meter el bucle ahi dentro ya que es una funcion recursiva que va buscando dentro de todos los direcotrios y cuando encuentra ficheros se va a la funcion que mostre mas abajo(copiaarchivos()).

Saludos y gracias
  #6 (permalink)  
Antiguo 10/02/2012, 00:39
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: SwingWorker

El método get() de SwingWorker creo que espera a que termine, puedes poner una llamada a eso justo después del worker.execute().

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:48.