我正在使用Task进行网络调用的JavaFX项目。不幸的是,我一直无法找到我可以如何传递参数。我搜索了很多链接,但没有一个提供。一个来自java2s的链接宣称他们正在通过,但代码并不反映这一点。JavaFX:为任务提供参数
正如您从下面的代码可以看到的,我正在使用for-loop并在URL中传递RestGroupAccount的ID参数。这一次没关系,因为我反正需要所有的RestCanvas。
但我想知道如何给参数任务
代码:
private Task<List<RestCanvas>> fetchCanvases = new Task<List<RestCanvas>>() {
@Override
protected List<RestCanvas> call() throws Exception {
List<RestCanvas> list = new ArrayList<>();
try{
for(RestGroupAccount groupAccount : groupAccounts) {
RestTemplate rest = StaticRestTemplate.getRest();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + StaticRestTemplate.jsessionid);
HttpEntity<RestCanvas> requestEntity = new HttpEntity<>(requestHeaders);
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<RestCanvas[]> responseEntity = rest.exchange(getCanvasForGroupAccount+groupAccount.getGroupId(), HttpMethod.GET, requestEntity, RestCanvas[].class);
RestCanvas[] restCanvasArray = responseEntity.getBody();
Collections.addAll(list, restCanvasArray);
}
}catch (Exception e){
e.printStackTrace();
}
return list;
}
};
如果需要更多的信息,请让我知道。谢谢。
如果您需要多次使用“Task”中的代码,您应该考虑创建非匿名子类,并在每次需要时使用构造参数实例化它,或者使用mutable参数创建一次。 –
@DmitryGinzburg由于'Task'旨在用于用户定义的线程,因此使用可变数据几乎总是一个错误,因为它会导致竞争条件。第一种方法是做到这一点,传递给构造函数的参数是不可变对象。 –
@DmitryGinzburg:当我在Task中创建一个构造函数时,它期望返回类型,这意味着它不知道构造函数。 –