Peformance nas transferencias

12 respostas
rafaelt

Fala galera, novamente estou precisando da ajuda de vcs, o seguinte codigo abaixo faz a transferencia de um arquivo para um pasta no servidor:

TIREI O CODIGO

A questao eh que se eu colocar um arquivo tipo de 800 megas pra cima ele trava a janela de interface e so destrava quando a transferencia acaba…como devo evitar isso???

alguem sabe??? sei lah, qualquer coisa ajudaria…

Abracossss
fuiiii

12 Respostas

sapulha

Ele trava a sua janela de interface pq o método ainda está executando.
Se vc quer que tenha independencia de processo, utilize uma Thread.
Crie uma thread pra fazer a transferência e coloque seu método dentro dela, dessa forma sua interface será liberada imediatamente, não precisando terminar seu processamento.

Luca

Olá

Procure entender como funciona SwingWorker ou use a API Foxtrot

[]s
Luca

rafaelt

sapulha:
Ele trava a sua janela de interface pq o método ainda está executando.
Se vc quer que tenha independencia de processo, utilize uma Thread.
Crie uma thread pra fazer a transferência e coloque seu método dentro dela, dessa forma sua interface será liberada imediatamente, não precisando terminar seu processamento.

Teria como vc me dar ume xemplo de codigo, de acordo com o codigo que eu postei acima…???

abracos…
fuiii

sapulha

Coloque seu código em uma método na sua classe, que possa ser acionado de fora.

Depois faça algo do tipo:

public class myThread extends Thread {

public void run() {

SuaClasse.seuMetodo();

|

|

Depois chame esse código com MyThread t = new MyThread();
t.start();

Chame isso da sua interface, assim a thread irá rodar e sua interface ficará livre para o usuário continuar utilizando

rafaelt

sapulha:
Coloque seu código em uma método na sua classe, que possa ser acionado de fora.

Depois faça algo do tipo:

public class myThread extends Thread {

public void run() {

SuaClasse.seuMetodo();

|

|

Depois chame esse código com MyThread t = new MyThread();
t.start();

Chame isso da sua interface, assim a thread irá rodar e sua interface ficará livre para o usuário continuar utilizando

Nao funcionou, mais provavelmente eu naum devo estar fazendo corretamente.
E na minha interface ja tem um metodo chamado run() dentro do void main…

Ajudaria se eu postar minha classe inteira???

[]'s

Luca

Olá

Provavelmente não. O que ajudaria seria gastar meia hora para entender como funcionam as threads do Swing e usar SwingWorker ou foxtrot.

[]s
Luca

rafaelt

Luca:
Olá

Provavelmente não. O que ajudaria seria gastar meia hora para entender como funcionam as threads do Swing e usar SwingWorker ou foxtrot.

[]s
Luca

Blz, posso fazer isso…

Essa SwingWorker que vc se refere eh uma classe???
Axo que eu tenho essa classe.
Se puder me dar mais informacoes sobre ela…
abracos

Rafael

rafaelt

Nao ta rolando com essa Swing Worker, alguem pode me dar um exemplo de acordo com o codigo que eu coloquei acima…

obrigado…

PS.: Editando, consegui galera, valeuuuuuuuuuuuuuuuuu

Luca

Olá

Como?

[]s
Luca

rafaelt

Luca:
Olá

Como?

[]s
Luca

Fiz exatamente como diz o javadoc.

Luca

Olá

Onde?

E porque na hora de perguntar você colocou o código e quando resolveu o problema não mostrou como ficou o código?

[]s
Luca

rafaelt

Luca:
Olá

Onde?

E porque na hora de perguntar você colocou o código e quando resolveu o problema não mostrou como ficou o código?

[]s
Luca

ficou assim meu querido

public void sendFile()
	{	
		final SwingWorker worker = new SwingWorker()
		{
        	public Object construct() 
        	{
				try
				{
					File file = fc.getSelectedFile(); //Origem do arquivo.
					String selectedFile = file.getName();
					String ret = selectedFile;
					
					long fileSize = file.length(); //Tamanho do arquivo.
					fileUpload = "/"+file.getName()+"/";
					output = filePath + fileUpload; //Local de upload, para onde o arquivo está indo.
					File f = new File(output); //Destino do arquivo.		
					filePathUpload = "localhost/lr/";
					
					long transferRate = 0;
					
					
					
					
					
					//Enviando o arquivo.
			        log.append(" "+newline+" ---------- Enviando arquivos ---------- " + newline);
			        log.append("Enviando: "+file.getName()+", 0 KB/s, Enviado / "+fileSize+" "+newline+"Tempo restante: " + newline);
					InputStream in = new FileInputStream(file);
					OutputStream out = new FileOutputStream(f);
					
					byte[] buffer = new byte[20480];
					int tamanho = 0;
					//progressBar = 0;
					
					while((tamanho = in.read(buffer)) > 0)
					{
						out.write(buffer, 0, tamanho);
						//++progressBar;
					} 
			
					in.close(); 
					out.close();
					log.append("Arquivo enviado com sucesso: " + file.getName() + newline /*+ "Tamanho: " + fileSize + newline*/);
			    }
			        		
			    catch(Exception e2)
			    {
			        log.append("Erro ao enviar o arquivo: " + e2.getMessage());
			        log.invalidate();
			        //return;
			    }
				
				return new upMenu();
			}
		};
		
		worker.start();

com a classe SwingWorker dentro do meu projeto, de acordo como manda aqui: http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html#SwingWorker

valeu…

Criado 31 de outubro de 2006
Ultima resposta 1 de nov. de 2006
Respostas 12
Participantes 3