Estou sem idéias de como impedir a GUI de congelar enquanto faço um http request, quando clico em um botão na minha tela, o pedido é feito e então um XML é retornado e utilizo ele para preencher um formulario, mas se eu uso uma Thread no pedido para impedir a tela de congelar, o programa continua antes do XML ser retornado, mantendo o document null.
public void actionPerformed(ActionEvent btn){
if(btn.getSource().equals(screen.getBtnOk1())){
Player player = setPlayerData(1); //pego o xml e coloco as informaçoes na classe player
if(player != null)
setForm(player,1); //uso as informaçoes do player para preencher o formulario
}
public Player setPlayerData(int i){
Document doc = null;
Player player = new Player();
String nickname = null;
try {
if(i == 1){
nickname = screen.getjComboBox_player1().getSelectedItem().toString();
doc = HttpRequest.getXml(nickname);
player1 = player;
}
else{
nickname = screen.getjComboBox_player2().getSelectedItem().toString();
doc = HttpRequest.getXml(nickname);
player2 = player;
}
player.setGamesPlayed(Integer.parseInt(PathXml.getValue(doc, "rnk_games_played")));
player.setAnnihilation(Integer.parseInt(PathXml.getValue(doc, "rnk_annihilation")));
player.setAssists(Integer.parseInt(PathXml.getValue(doc, "rnk_heroassists")));
player.setBloodbath(Integer.parseInt(PathXml.getValue(doc, "rnk_ks10")));
player.setBloodlust(Integer.parseInt(PathXml.getValue(doc, "rnk_bloodlust")));
player.setChampion(Integer.parseInt(PathXml.getValue(doc, "rnk_ks9")));
player.setCreepDeny(Double.parseDouble(PathXml.getValue(doc, "rnk_denies"))/player.getGamesPlayed());
player.setCreepKill(Double.parseDouble(PathXml.getValue(doc, "rnk_teamcreepkills"))/player.getGamesPlayed());
player.setDeaths(Double.parseDouble(PathXml.getValue(doc, "rnk_deaths")));
player.setDominating(Integer.parseInt(PathXml.getValue(doc, "rnk_ks8")));
player.setDoubleTap(Integer.parseInt(PathXml.getValue(doc, "rnk_doublekill")));
player.setHatTrick(Integer.parseInt(PathXml.getValue(doc, "rnk_triplekill")));
player.setImmortal(Integer.parseInt(PathXml.getValue(doc, "rnk_ks15")));
player.setKills(Double.parseDouble(PathXml.getValue(doc, "rnk_herokills")));
player.setKdr(player.getKills()/player.getDeaths());
player.setLegendary(Integer.parseInt(PathXml.getValue(doc, "rnk_ks5")));
player.setLosses(Integer.parseInt(PathXml.getValue(doc, "rnk_losses")));
player.setMmr(Double.parseDouble(PathXml.getValue(doc, "rnk_amm_team_rating")));
player.setNickname(PathXml.getValue(doc, "nickname"));
player.setOnslaught(Integer.parseInt(PathXml.getValue(doc, "rnk_ks6")));
player.setQuadKill(Integer.parseInt(PathXml.getValue(doc, "rnk_quadkill")));
player.setSavageSick(Integer.parseInt(PathXml.getValue(doc, "rnk_ks7")));
player.setSerialKiller(Integer.parseInt(PathXml.getValue(doc, "rnk_ks3")));
player.setUltimateWarrior(Integer.parseInt(PathXml.getValue(doc, "rnk_ks4")));
player.setWins(Integer.parseInt(PathXml.getValue(doc, "rnk_wins")));
double points = calculatePoints(player);
player.setPoints(points);
}
package util;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class HttpRequest {
public HttpRequest(){
}
public static Document getXml(String nickname) throws SAXException, IOException, XPathExpressionException, ParserConfigurationException, TransformerException{
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse("http://xml.heroesofnewerth.com/xml_requester.php?f=player_stats&opt=nick&nick[]="+nickname);
return doc;
}
}