rafaelt
Outubro 31, 2006, 5:33pm
#1
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
sapulha
Outubro 31, 2006, 5:36pm
#2
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
Outubro 31, 2006, 5:40pm
#3
Olá
Procure entender como funciona SwingWorker ou use a API Foxtrot
[]s
Luca
rafaelt
Outubro 31, 2006, 5:59pm
#4
[quote=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.[/quote]
Teria como vc me dar ume xemplo de codigo, de acordo com o codigo que eu postei acima…???
abracos…
fuiii
sapulha
Outubro 31, 2006, 6:09pm
#5
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
Outubro 31, 2006, 7:04pm
#6
[quote=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[/quote]
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
Outubro 31, 2006, 7:13pm
#7
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
Outubro 31, 2006, 7:22pm
#8
[quote=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[/quote]
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
Outubro 31, 2006, 9:42pm
#9
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
rafaelt
Novembro 1, 2006, 4:00pm
#11
[quote=Luca]Olá
Como?
[]s
Luca[/quote]
Fiz exatamente como diz o javadoc.
Luca
Novembro 1, 2006, 4:44pm
#12
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
Novembro 1, 2006, 7:16pm
#13
[quote=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[/quote]
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…