Aplicação DESKTOP com SWING congela/trava sem dar erro
8 respostas
M
menegaro
Tenho uma aplicação desktop com swing que fica requisitando uma url enviando dados por método post e retornando informações usando HttpClient 4.1, pelo console do java esta parando ou congelando em na linha13 que é a última msg que sai no console ai para no httpclient.execute, o mais imprecionante é que esse erro só acontece num cliente meu no MT, aqui na empresa e demais clientes que temos a aplicação não trava de forma nenhuma, já não sei mais o que tentar para resolver isso se alguem tiver alguma ideia por favor me ajude.
Bom ela trava porque é o comportamento padrão do swing, ele congela até que o processo termine…
Não tem algum problema da rede do seu cliente que esta causando este problema? ( firewall, proxy, etc… )
M
menegaro
mas tipo trava sem dar erro nenhum, isso é normal? como la trava e aqui não trava?
J
Jose111
Vc pode postar seu codigo para dar uma olhada?
Os clientes possuem os mais variados ambientes… nem sempre uma solução roda perfeitamente em 100% deles, pode ter alguma coisa bloqueando la(windows, anti-vírus,provedor de internet,…),
acho que deve ter algum detalhe que deve estar lhe escapando…
Obs: sem informações mais detalhadas fica dificil de ajudar…
V
ViniGodoy
Mova o execute para outra thread. Isso evitará que a aplicação congele.
M
menegaro
desculpe a ignorância mas como fazer isso?
M
menegaro
Segue os arquivos .java e o link com todo o projeto no netbeans que fiz para poder testar esta no link www.menegaro.com/ErroMT.rar
Se alguém puder me ajudar eu já reinstalei o java na maquina do cliente, já adicionei o java no firewall do windows 7 dele, já tentei um monte de coisas e nada.
M
menegaro
Pessoal muito obrigado os que responderão, acho que consegui resolver o problemas definindo o timeout, mas minha duvida agora é no tempo para estabelecer a conexão e o tempo para ficar aguardando a resposta, esta definido 2 segundos para aguardar a conexão e 5 segundos para aguardar o retorno, tem como esses valores serem menores? qual a conseqüência se diminuir?
importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.util.ArrayList;importjava.util.List;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.protocol.HTTP;importorg.apache.http.client.ResponseHandler;importorg.apache.http.impl.client.BasicResponseHandler;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.params.BasicHttpParams;importorg.apache.http.params.HttpConnectionParams;importorg.apache.http.params.HttpParams;publicclassClientConnectionRelease{publicStringxmlTabPeds(StringidSangria){HttpParamshttpParameters=newBasicHttpParams();// Definir o tempo limite em milissegundos até que uma conexão é estabelecida.inttimeoutConnection=2000;HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection);// Definir o limite do soquete padrão (SO_TIMEOUT)// em milissegundos, que é o tempo limite para espera de dados.inttimeoutSocket=5000;HttpConnectionParams.setSoTimeout(httpParameters,timeoutSocket);DefaultHttpClienthttpclient=newDefaultHttpClient(httpParameters);StringresponseBody=null;try{HttpPosthttpost=newHttpPost("http://www.cliksys.com.br");List<NameValuePair>nvps=newArrayList<NameValuePair>();nvps.add(newBasicNameValuePair("acao","carrega"));nvps.add(newBasicNameValuePair("id_sangria",idSangria));httpost.setEntity(newUrlEncodedFormEntity(nvps,HTTP.ISO_8859_1));ResponseHandler<String>responseHandler=newBasicResponseHandler();responseBody=httpclient.execute(httpost,responseHandler);}catch(UnsupportedEncodingExceptionex){System.out.println("erro: "+ex.getMessage());}catch(IOExceptionex){System.out.println("Erro IOException: "+ex.getMessage());}catch(Exceptionex){System.out.println("Erro Exception: "+ex.getMessage());}finally{httpclient.getConnectionManager().shutdown();}returnresponseBody;}}
E
erickguitar
Você pode criar uma classe que estenda a classe Thread e implementar o metodo run(). Entretanto quando for chama-lá deverá executar o método start().
public class ClientConnectionReleaseThread extends Thread{
public void run(){
//CHAMA A OUTRA AÇÃO
}
}
quando for chamar sua thread execute o metodo start() que é do pai da classe, assim não vai congelar o formulário do swing.