Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:为任务提供参数_Java_Javafx_Task - Fatal编程技术网

JavaFX:为任务提供参数

JavaFX:为任务提供参数,java,javafx,task,Java,Javafx,Task,我正在从事一个JavaFX项目,在这个项目中,我正在与您进行网络通话。不幸的是,我无法找到如何向它传递参数。我搜索了很多链接,但没有一个提供。来自java2s的一个链接声称它们正在传递,但代码没有反映这一点 从下面的代码中可以看到,我使用for循环并在URL中传递RestGroupAccount的ID参数。这次没关系,因为我需要所有的RestCanvas 但我想知道如何为任务指定参数 代码: private Task<List<RestCanvas>> fetchCanv

我正在从事一个JavaFX项目,在这个项目中,我正在与您进行网络通话。不幸的是,我无法找到如何向它传递参数。我搜索了很多链接,但没有一个提供。来自java2s的一个链接声称它们正在传递,但代码没有反映这一点

从下面的代码中可以看到,我使用for循环并在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;
    }
};
private Task fetchCanvases=new Task(){
@凌驾
受保护的列表调用()引发异常{
列表=新的ArrayList();
试一试{
对于(RestGroupAccount groupAccount:groupAccounts){
RestTemplate rest=StaticRestTemplate.getRest();
HttpHeaders requestHeaders=新的HttpHeaders();
添加(“Cookie”、“JSSessionId=“+StaticRestTemplate.jsSessionId”);
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
添加(新的MappingJackson2HttpMessageConverter());
添加(新的MappingJackson2HttpMessageConverter());
ResponseEntity ResponseEntity=rest.exchange(getCanvasForGroupAccount+groupAccount.getGroupId(),HttpMethod.GET,requestEntity,RestCanvas[].class);
RestCanvas[]restCanvasArray=responseEntity.getBody();
Collections.addAll(list,restCanvasArray);
}
}捕获(例外e){
e、 printStackTrace();
}
退货清单;
}
};

如果需要更多信息,请告诉我。多谢各位

> P>如果您需要多次使用您的任务中的代码,则应考虑创建非匿名子类,并在每次需要使用构造参数时实例化它。

在您的示例中,这可能是:

private Task<List<RestCanvas>> fetchCanvases = new MyTask(getCanvasForGroupAccount + groupAccount.getGroupId());

// ...

// please don't use this name :)
private static class MyTask extends Task<List<RestCanvas>> {
    private final String id;

    public MyTask(String id) {
        this.id = id;
    }

    @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(id, HttpMethod.GET, requestEntity, RestCanvas[].class);
                RestCanvas[] restCanvasArray = responseEntity.getBody();
                Collections.addAll(list, restCanvasArray);
            }
        }catch (Exception e){
            e.printStackTrace();
        }


        return list;
    }
}
private Task fetchCanvases=new MyTask(getCanvasForGroupAccount+groupAccount.getGroupId());
// ...
//请不要使用此名称:)
私有静态类MyTask扩展了Task{
私有最终字符串id;
公共MyTask(字符串id){
this.id=id;
}
@凌驾
受保护的列表调用()引发异常{
列表=新的ArrayList();
试一试{
对于(RestGroupAccount groupAccount:groupAccounts){
RestTemplate rest=StaticRestTemplate.getRest();
HttpHeaders requestHeaders=新的HttpHeaders();
添加(“Cookie”、“JSSessionId=“+StaticRestTemplate.jsSessionId”);
HttpEntity requestEntity=新的HttpEntity(requestHeaders);
添加(新的MappingJackson2HttpMessageConverter());
添加(新的MappingJackson2HttpMessageConverter());
ResponseEntity ResponseEntity=rest.exchange(id,HttpMethod.GET,requestEntity,RestCanvas[].class);
RestCanvas[]restCanvasArray=responseEntity.getBody();
Collections.addAll(list,restCanvasArray);
}
}捕获(例外e){
e、 printStackTrace();
}
退货清单;
}
}

我也有类似的需求,我需要创建可以接收文件并在其上执行任务的任务。在我的例子中,我需要对多个位置的文件执行不同的操作,因此我创建了以下类:

public abstract class FileOperationTask<V> extends Task<V> {
    protected File file;

    public FileOperationTask(File file) {
        this.file = file;
    }
}
公共抽象类FileOperationTask扩展任务{
受保护的文件;
公共文件操作任务(文件){
this.file=文件;
}
}
这允许我在控制器中定义以下内容:

FileOperationTask<List<RaffleTicket>> task = new FileOperationTask<List<RaffleTicket>>(file){
    @Override
    protected List<RaffleTicket> call() throws Exception {
        this.file.toString();
        return null;
    }
};
new Thread(task).run();
FileOperationTask任务=新建FileOperationTask(文件){
@凌驾
受保护的列表调用()引发异常{
this.file.toString();
返回null;
}
};
新线程(任务).run();

如您所见,我可以对文件对象进行操作,现在实现异步任务与实现普通任务大致相同。

如果需要多次使用
任务中的代码,您应该考虑创建非匿名子类,并在每次需要使用构造参数时实例化它,或者用可变的PARAM创建它一次。@ DmitryGinzburg因为代码“>任务<代码>打算用于用户定义的线程,使用可变数据几乎总是错误的,因为它导致竞争条件。第一种方法是这样做的,传递给构造函数的参数是不可变对象。@DmitryGinzburg:当我在任务中创建构造函数时,它需要返回类型,这意味着它不知道构造函数。@James_D是的,当然,很难不同意,尽管上一条注释无法编辑。@WeareBorg“预期返回类型”是什么意思?我只是试着按照你建议的方式传递参数,调用方法没有执行,没有网络调用。这是pastebin中的代码@WeareBorg您实际上并没有执行任务。