elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [SOLUCIONADO]Duda Barra de Progreso en Transferencia de Archivos (Java)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO]Duda Barra de Progreso en Transferencia de Archivos (Java)  (Leído 12,825 veces)
jossydeleon

Desconectado Desconectado

Mensajes: 10



Ver Perfil WWW
[SOLUCIONADO]Duda Barra de Progreso en Transferencia de Archivos (Java)
« en: 2 Septiembre 2010, 20:13 pm »

Hola gente del foro soy nuevo por aki y quiero pedirles ayuda en un problemita que tengo.

Estoy realizando una aplicacion en Java que me permita el envio de archivos usando Sockets con una aplicacion Cliente y una Servidor. El cliente se conecta al servidor y este le envia un archivo a Servidor. Pero quisiera poner una Barra de progreso que me muestre cuanto falta para terminar el proceso de transferencia. He buscado pero no doy con la solucion. He aki mi codigo:

Código
  1. //Cliente
  2. import java.net.*;
  3. import java.io.*;
  4. import javax.swing.*;
  5.  
  6. class Cliente
  7. {
  8.  public static void main (String[] args)
  9.  {
  10.  
  11.      int in;
  12.      byte[] byteArray;
  13.      File archivo = null;
  14.      String direccionArchivo = null;
  15.      String IP = null;
  16.  
  17.      try
  18.      {
  19.          IP = JOptionPane.showInputDialog(null,"Ingrese la direccion IP a la cual desea conectarse","Cliente",JOptionPane.CANCEL_OPTION);
  20.          Socket via = new Socket(IP, 1234);
  21.          if(via.isConnected())
  22.          {
  23.            JOptionPane.showMessageDialog(null, "Conectado al servidor: " + IP);
  24.  
  25.            JFileChooser selector = new JFileChooser();
  26.            selector.setDialogTitle("Selecciona el archivo a enviar");
  27.            int resultado = selector.showOpenDialog(null);
  28.            if (resultado == JFileChooser.APPROVE_OPTION)
  29.            {
  30.                archivo = selector.getSelectedFile();
  31.                direccionArchivo = archivo.getPath().toString();
  32.            }
  33.  
  34.            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
  35.            BufferedOutputStream bos = new BufferedOutputStream(via.getOutputStream());
  36.  
  37.            //Enviamos el nombre del archivo
  38.            DataOutputStream dos = new DataOutputStream(via.getOutputStream());
  39.            dos.writeUTF(archivo.getName());
  40.  
  41.            byteArray = new byte[8192];
  42.            while ((in = bis.read(byteArray)) != -1)
  43.            {
  44.                bos.write(byteArray,0,in);
  45.            }
  46.  
  47.            bis.close();
  48.            bos.close();
  49.  
  50.            JOptionPane.showMessageDialog(null, "El archivo: " + archivo.getName().toString() +
  51.                                                 " se envio correctamente!");
  52.        }
  53.  
  54.      }catch (Exception e) {JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);}
  55.   }
  56. }  
  57.  


Código
  1. //Servidor
  2.  
  3. import java.net.*;
  4. import java.io.*;
  5. import javax.swing.*;
  6.  
  7. class Servidor
  8. {
  9.     public static void main (String[] args)
  10.     {
  11.         ServerSocket server;
  12.         Socket connection = null;
  13.  
  14.         DataOutputStream output;
  15.         BufferedInputStream bis;
  16.         BufferedOutputStream bos;
  17.  
  18.         byte[] receivedData;
  19.         int in;
  20.         String file;
  21.  
  22.         try{
  23.             server = new ServerSocket(1234);
  24.             while ( true ) {
  25.                 connection = server.accept();
  26.  
  27.                 receivedData = new byte[1024];
  28.                 bis = new BufferedInputStream(connection.getInputStream());
  29.                 DataInputStream dis = new DataInputStream(connection.getInputStream());
  30.  
  31.                 //recibimos el nombre del fichero
  32.                 file = dis.readUTF();
  33.                 file = file.substring(file.indexOf('/')+1,file.length());
  34.  
  35.                 //aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
  36.                 bos = new BufferedOutputStream(new FileOutputStream("/" + file));
  37.                 while ((in = bis.read(receivedData)) != -1){
  38.                     bos.write(receivedData,0,in);
  39.                 }
  40.                 bos.close();
  41.                 dis.close();
  42.  
  43.                 JOptionPane.showMessageDialog(null, "Archivo (" + file.toString() + ") Recibido satisfactoriamente");
  44.                 System.exit(0);
  45.             }
  46.         }catch (Exception e ) {
  47.             JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
  48.         }
  49.     }
  50. }
  51.  


Buscando en la Web encontre un codigo para desarrollar un JProgressBar

Código:
public void iterate() {
  while (num < 2000) {
  current.setValue(num);
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) { }
  num += 95;
  }
  }


Si pueden ayudarme a fusionar El cliente y Servidor con la JProgress Bar se lo agradeceria mucho.

Muchas Gracias


« Última modificación: 3 Septiembre 2010, 05:21 am por LEYER » En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #1 en: 2 Septiembre 2010, 21:06 pm »

Esta es una forma, pero existe otra que es setear el maximo del progressBar a 100 y usar int c=(leido*100)/tamaño; ya la aplicaras después

Código
  1. JDialog dialog = new JDialog();
  2.            JProgressBar progressBar=new JProgressBar(0, 100);
  3.            dialog.setSize(190, 80);
  4.            progressBar.setStringPainted(true);
  5.            dialog.add(progressBar);
  6.            dialog.setLocationRelativeTo(null);
  7.            dialog.setVisible(true);
  8.            byteArray = new byte[8192];
  9.            long size=archivo.length(), c=0;
  10.            int l=0;
  11.            System.out.println(size);
  12.            progressBar.setMaximum((int)size);
  13.            while ((in = bis.read(byteArray)) != -1)
  14.            {
  15.             l+=in;
  16.                bos.write(byteArray,0,in);
  17.                progressBar.setValue(l);
  18.            }
  19.  
  20.            bis.close();
  21.            bos.close();

Puedes hacer algo similar en el servidor.

Un saludo.


« Última modificación: 2 Septiembre 2010, 21:44 pm por LEYER » En línea

jossydeleon

Desconectado Desconectado

Mensajes: 10



Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #2 en: 2 Septiembre 2010, 21:38 pm »

Muchisimas gracias LEYER por responder a mi duda... Voy a probar el codigo e implentar uno parecido al lado del cliente. De nuevo muchisimas Gracias  :D
En línea

jossydeleon

Desconectado Desconectado

Mensajes: 10



Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #3 en: 2 Septiembre 2010, 22:18 pm »

LEYER De nuevo muchas gracias funciono el codigo que pusiste y lo pude implementar en el Servidor. Ahora quiero poner un boton que diga cancelar pero solo en la parte del Cliente.

Creo un boton y lo inserto en el JDialog y le agrego un evento, pero no se con que instruccion detener el proceso de copia ????¿¿¿¿
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #4 en: 2 Septiembre 2010, 23:03 pm »

LEYER De nuevo muchas gracias funciono el codigo que pusiste y lo pude implementar en el Servidor. Ahora quiero poner un boton que diga cancelar pero solo en la parte del Cliente.

Creo un boton y lo inserto en el JDialog y le agrego un evento, pero no se con que instruccion detener el proceso de copia ????¿¿¿¿

Pues haz que la condición del for o el while que uses para transferencia se cumpla o incumpla (dependiendo) y asi lo paras?

Saludos
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #5 en: 3 Septiembre 2010, 03:44 am »

LEYER De nuevo muchas gracias funciono el codigo que pusiste y lo pude implementar en el Servidor. Ahora quiero poner un boton que diga cancelar pero solo en la parte del Cliente.

Creo un boton y lo inserto en el JDialog y le agrego un evento, pero no se con que instruccion detener el proceso de copia ????¿¿¿¿

Pues haz que la condición del for o el while que uses para transferencia se cumpla o incumpla (dependiendo) y asi lo paras?

Saludos

Tienes que tener en cuenta como lo esta haciendo, Fíjate que si implementa una acción del button, no podrá crear una variable booleana dentro del actionPerformed ya que le pedirá que esa variable sea inmutable (Final)

La solución en ese caso seria, que organices mas el código, ya que como lo tienes sera engorroso implementar la acción de cancelar.

Fijate que puedes hacer esto:

Código
  1. Action action=new AbstractAction("Cancelar") {
  2. private static final long serialVersionUID = 1L;
  3. @Override
  4. public void actionPerformed(ActionEvent e) {
  5. cancel = true;
  6. }
  7. };
  8. button.setAction(action);  

Pero en tu caso, tendrías que colocar la variable booleana cancel como variable de clase, osea con el modificador static para poder acceder a modificar esa variable.

Y así poder hacer la verificación si se cancelo la tranferencia.

Example:
Código
  1. while ((in = bis.read(byteArray)) != -1){
  2. if(Cliente.cancel){
  3.             System.err.println("Tranferencia cancelada.");
  4.             dialog.dispose();
  5.             bis.close();
  6.                 bos.close();
  7.             break;
  8.            }
  9. //.....................
  10. //etc
  11. }
  12.  

Pero mi recomendación final es que organices tu codigo.

Un saludo.



En línea

jossydeleon

Desconectado Desconectado

Mensajes: 10



Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #6 en: 3 Septiembre 2010, 05:01 am »

LEYER de nuevo muchas gracias... voy a seguir tu recomendacion aunke ya habia realizado ese evento. Sino que era por cuestion de tiempo y estaba desesperado por entregar ese taller, Como siempre buen colombiano jejeje.

Bueno como es la primera vez que entro a este foro no se como hago para cerrarlo y ponerlo como solucionado.

Gracias :-*
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Duda Barra de Progreso en Transferencia de Archivos (Java)
« Respuesta #7 en: 3 Septiembre 2010, 05:20 am »

De nada amigo , bueno los usuarios normales no pueden cerrar un post tiene que ser algún moderador , déjamelo a mi.

Cualquier otra problema aquí estamos :)
Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Barra de progreso para subir archivos
PHP
sparrowise 5 6,622 Último mensaje 5 Septiembre 2011, 19:21 pm
por Nakp
transferencia java - javascript
Programación General
javanimal 0 1,954 Último mensaje 15 Mayo 2012, 21:26 pm
por javanimal
DUDA Ruta archivos en ejecución[SOLUCIONADO] « 1 2 »
.NET (C#, VB.NET, ASP)
Yaldabaot 10 6,558 Último mensaje 8 Febrero 2014, 21:23 pm
por Yaldabaot
Duda archivos en C (solucionado)
Programación C/C++
David8 4 3,043 Último mensaje 19 Mayo 2014, 18:36 pm
por rir3760
Duda sobre el progreso en la seguridad de las comunicaciones « 1 2 »
Criptografía
arget 10 8,315 Último mensaje 30 Marzo 2016, 12:10 pm
por arget
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines