En este ejemplo veremos como descargar un archivo y en una barra de progreso ver el estado de la descarga. Comencemos por la interfaz:
Ahora crearemos la clase que se encargará de descargar el archivo y animar la barra de progreso.
package modelo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
import vista.principal;
/**
*
* @author pablo
*/
public class hiloDescargar implements Runnable{
principal p;
String ar;
public hiloDescargar(principal p, String ar){
this.p = p;
this.ar = ar;
}
@Override
public void run() {
try {
//Creamos una URL usando el String recibido del campo de texto
URL url = new URL(ar);
URLConnection urlCon = url.openConnection();
//Creamos un archivo para la descarga igual que el archivo remoto
File file2 = new File(url.toString());
File file = new File(file2.getName());
//Abrimos streamers y creamos un array de bytes para ir almacenando hay
//los datos de descarga y enviarlos al archivo
try (FileOutputStream fos = new FileOutputStream(file)) {
InputStream is = urlCon.getInputStream();
byte [] array = new byte[1000];
int leido = is.read(array);
//Aplicando valores a la barra de progreso
int maximo = urlCon.getContentLength();
p.barra.setMinimum(0);
p.barra.setMaximum(maximo);
p.barra.setValue(0);
int actual = 0;
while (leido > 0) {
fos.write(array,0,leido);
leido=is.read(array);
p.barra.setValue(actual);
actual += leido;
p.barra.setString("Descargando "+actual+"/"+maximo+" bytes");
}
fos.close();
}
} catch (MalformedURLException ex) {
Logger.getLogger(hiloDescargar.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(hiloDescargar.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Ahora tan solo nos queda crear un objeto hiloDescargar e introducirlo dentro de un hilo. Usaremos un ActionPerformed sobre el botón de descargar para ello.
this.p.btnDescargar.setActionCommand("btnDescargar");
this.p.btnDescargar.addActionListener((ActionEvent ae) -> {
hiloDescargar h = new hiloDescargar(p, p.txtDireccion.getText());
Thread t = new Thread(h);
t.start();
});
Con esto estaría terminada la aplicación.
Proyecto de netbeans : aquí.
Etiquetas: hilos, java, jprogressbar, streamers, thread
0 Comments:
Entrada más reciente Entrada antigua Inicio
Suscribirse a:
Enviar comentarios (Atom)
Con la tecnología de Blogger.

