我在多线程问题上有点挣扎。我需要通过 发送请求sendRESTRequest(jsonRequest),但我不想阻塞 UI 线程,所以maskerPane.setVisible会被执行。
我可以使用 JavaFX Task,但是我必须currentValueLabel.setText在那个线程中编写我的(等)。但是因为我正在重用该sendRESTRequest(jsonRequest)方法,所以我会用很多无用的行来破坏我的代码。
是否可以sendRESTRequest在另一个线程上执行,等待结果Unirest.post并使用返回HttpResponse jsonResponse的进行进一步处理?
目前我正在使用这段代码:
@FXML
protected void searchButtonAction() {
maskerPane.setVisible(true);
cardNumber = cardNumberTextField.getText();
JSONObject jsonRequest = new JSONObject()
.put("id", cardNumber)
.put("trans", 20);
//
// How to put this asynchronus, but wait for the answer before continuing to System.out.println(loyaltyResponse.toString());
//
JSONObject loyaltyResponse = sendRESTRequest(jsonRequest);
//
//
//
System.out.println(loyaltyResponse.toString());
currentValueLabel.setText(loyaltyResponse.getString("amount").replace(".", ",") + " Currency");
maximumValueLabel.setText(loyaltyResponse.getString("balanceMax").replace(".", ",") + " Currency");
maskerPane.setVisible(false);
}
private JSONObject sendRESTRequest(JSONObject jsonRequest) {
HttpResponse<JsonNode> jsonResponse = null;
try {
jsonResponse = Unirest.post("http://myurl/")
.header("accept", "application/json")
.body(jsonRequest)
.asJson();
} catch (UnirestException e) {
e.printStackTrace();
}
return jsonResponse.getBody().getObject();
}
谢谢你的帮助!
慕雪6442864
相关分类