У меня есть приложение JavaFX, которое использует веб-службы через API-интерфейс Jersey Client, каждый раз, когда часть приложения (экранов) блокируется при выполнении вызова веб-службы.JavaFX UI зависает при вызове веб-службы
Нет темы, которую я использовал для совершения вызовов веб-службы.
Ниже приводится Джерси Клиент Код:
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.json.JSONConfiguration;
public class WSClient{
WebResource webResource;
ClientResponse response;
protected Client getWSClient() {
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(
JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client wsClient = Client.create(clientConfig);
return wsClient;
}
public ArrayList<String> getNames(){
ArrayList<String> names= new ArrayList<>();
try{
webResource = getWSClient().resource("http://localhost:8080/names");
response = webResource.type("application/json").accept("application/json").get(ClientResponse.class);
}catch(Exception ex){
log.error("Failed : " + ex.getMessage());
return null;
}
if(response.getStatus() != 200){
return null;
}
String output = response.getEntity(String.class);
names= getGson().fromJson(output,
new TypeToken<ArrayList<String>>() {
}.getType());
return names;
}
}
Ниже приводится JavaFX класс контроллера:
private ComboBox<String> cmbNames = new ComboBox<>();
cmbNames.setItems(FXCollections.observableList(new WSClient().getNames()));
ваша помощь очень ценится!
Конечно, он замерзает, он выполняет работу в потоке графического интерфейса. – meskobalazs
Это означает, что мне нужно написать поток, который выполняет каждый вызов веб-службы? –
Вы можете использовать 'javafx.concurrent.Task'. Вы действительно не должны писать свои собственные потоки, использовать то, что JavaFX предоставляет вам. – meskobalazs