Pessoal,
Preciso fazer chamadas a minha aplicação web e para isto estou utilizando a classe URLConnection. O meu problema é que preciso que isso seja feito sem barrar a continuação do meu loop… pensei em fazer com Thread porque na minha cabeça isso isolaria o processamento em outro lugar e me deixaria livre para continuar sem ter de esperar o retorno da classe que acessa minha aplicação web… Mas não funciona. ele fica “aguardando” o retorno para então prosseguir. estou fazendo assim:
package classWithoutMain;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.util.Random;
public class ContactPOO extends Thread {
public int a = 0;
public String url = "http://l2pog.com/php/register.php?155426";
public Random num = new Random();
public String proxy = "200.101.82.216";
public int port = 3128;
public String parametros = "cpf=" + num.nextInt(07451545602) + "&email="
+ num.nextInt() + "%l2pog%2Ecom&password=aaaaaa&username="
+ num.nextInt()
+ "ulaos&pais=Brasil&nome=asdasdasdasdasdas&sexo=Masculino";
public String send() {
try {
Proxy pro = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy,
port));
URL urlConnection = new URL(url);
HttpURLConnection postConnection = (HttpURLConnection) urlConnection
.openConnection();
postConnection.setDoInput(true);
postConnection.setDoOutput(true);
postConnection.setRequestProperty("Request-Method", "POST");
postConnection.setRequestProperty("Content-type",
"application/x-www-form-urlencoded ");
postConnection
.setRequestProperty(
"User-Agent",
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
postConnection.setRequestProperty("Host", "www.ivannet.com.br");
OutputStreamWriter writer = new OutputStreamWriter(
postConnection.getOutputStream(), "iso-8859-1");
writer.write(parametros);
writer.flush();
writer.close();
BufferedReader retorno = new BufferedReader(new InputStreamReader(
postConnection.getInputStream()));
String ret = retorno.readLine() + "\n ";
System.out.println(ret);
retorno.close();
postConnection.getInputStream();
postConnection.disconnect();
this.finalize();
return ret;
} catch (MalformedURLException e) {
return "Erro na url: " + e.getMessage();
} catch (IOException e) {
return "Erro AIo: " + e.getMessage();
} catch (Throwable e) {
return "Erro Terminar a Thread: " + e.getMessage();
}
}
@Override
public synchronized void start() {
super.start();
send();
}
}
a classe acima seria a thread responsável pelo consumo da minha aplicação.
package classWithoutMain;
public class StarterContact {
public static void main(String args[]) {
for (int a = 0; a < 10; a++) {
Thread cont = new ContactPOO();
cont.start();
System.out.println(a);
}
}
}
aí eu testo se está acontecendo o que preciso. que seria a impressão do contador a e só depois os resultados da ContactPOO que tem o retorno da minha aplicação web…
creio que deveria retornar assim:
0
1
2
3
…
result=cadastroOK
result=cadastroOK
result=cadastroOK
…
mas o que acontece é:
result=cadastroOK
0
result=cadastroOK
1
result=cadastroOK
2
result=success
3
result=cadastroOK
…
como resolver esse problema?