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

barra de progreso

Estas en el tema de barra de progreso en el foro de Java en Foros del Web. Buenas, Estoy haciendo un programa para el cole que copia ficheros y mientras copia los ficheros aparece una barra de progreso. el problema esta que ...
  #1 (permalink)  
Antiguo 01/02/2012, 12:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
barra de progreso

Buenas,

Estoy haciendo un programa para el cole que copia ficheros y mientras copia los ficheros aparece una barra de progreso. el problema esta que la barra del progreso pasa de 0 a 100 de golpe cuando termina de copiar el fichero.

Codigo:

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

out.write(buf, 0, len);
count +=len;

barraProgress.setValue(count);


}
alguien sabe porque??
Saludos
  #2 (permalink)  
Antiguo 01/02/2012, 13:14
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: barra de progreso

Debes setear el maximo de la barra de progreso. Por defecto es 100 y tu vas leyendo de 1024 en 1024.

Usa el metodo setMaximum.
Siendo el valor maximo el tamaño total del archivo.
  #3 (permalink)  
Antiguo 01/02/2012, 14:03
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: barra de progreso

Hola,

Adicionalmente tienes que ejecutar el método setValue() en un SwingWorker, porque el hilo donde estás leyendo bloquea toda la GUI y no actualiza la pantalla mientras está corriendo la lectura, creo en este caso no te vale simplemente el repaint(), puesto que igualmente se va a ejecutar hasta cuando termine de leer el archivo osea el hilo principal esté libre.

Saludos,
  #4 (permalink)  
Antiguo 01/02/2012, 14:30
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: barra de progreso

Ronruby,

lo tengo establecido el minomo y maximo de la barra.
barraProgress.setMaximum(tamaño_fichero_temp);
barraProgress.setMinimum(0);
.
tambien agrege
validate();
repaint();

y continua sin funcionar
codigo
barraProgress.setMaximum(tamaño_fichero_temp);
barraProgress.setMinimum(0);
barraProgress.setValue(0);

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

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(count);


barraProgress.setValue(count);
ventana.validate();
ventana.repaint();




}
  #5 (permalink)  
Antiguo 01/02/2012, 14:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: barra de progreso

Cita:
Iniciado por HackmanC Ver Mensaje
Hola,

Adicionalmente tienes que ejecutar el método setValue() en un SwingWorker, porque el hilo donde estás leyendo bloquea toda la GUI y no actualiza la pantalla mientras está corriendo la lectura, creo en este caso no te vale simplemente el repaint(), puesto que igualmente se va a ejecutar hasta cuando termine de leer el archivo osea el hilo principal esté libre.

Saludos,
y como lo tendria que hacer??
  #6 (permalink)  
Antiguo 01/02/2012, 23:03
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: barra de progreso

Hola,

Algo así : http://chuwiki.chuidiang.org/index.p...on_SwingWorker

Si sabes inglés te podrá ser util también : http://docs.oracle.com/javase/tutori.../progress.html

En el caso del InputStream te podrá ser util también el ProgressMonitorInputStream descrito en el tutorial anterior.

Saludos,

Etiquetas: barra, progreso
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 00:02.