Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/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_Concurrency_Task - Fatal编程技术网

如何在javafx中唯一地标识每个任务?

如何在javafx中唯一地标识每个任务?,java,javafx,concurrency,task,Java,Javafx,Concurrency,Task,我有一个包含URL的列表视图。当用户单击其中一个URL时,将下载视频。我在一个任务中调用视频下载函数,而这个任务又在一个线程中调用。用户可以点击多个视频URL,视频将开始下载。将为每个视频创建一个单独的任务。我想知道的是如何唯一地识别每个视频的任务 下载视频的功能: public void videoFileDownload(){ try { videoDownloadUrl = lblURL.getText().toString();

我有一个包含URL的列表视图。当用户单击其中一个URL时,将下载视频。我在一个任务中调用视频下载函数,而这个任务又在一个线程中调用。用户可以点击多个视频URL,视频将开始下载。将为每个视频创建一个单独的任务。我想知道的是如何唯一地识别每个视频的任务

下载视频的功能:

public void videoFileDownload(){
            try {

                videoDownloadUrl =  lblURL.getText().toString();

                IndexOfThisNode = hbox.getId();


                String path = "XXXX";
                downloadThisVideo = new VGet(new URL(videoDownloadUrl),new File(path));             




                downloadThisVideo.download();   
                System.out.println("Download this video: " + videoDownloadUrl + downloadThisVideo.getVideo().getState());

                System.out.println("Download complete");



            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("Retrying...");
            }  
        }
包含任务的函数:

    public void showDetailsButton(){

        btnSMDetails.addEventHandler(MouseEvent.MOUSE_CLICKED, (e)->{
        System.out.println("\n" + "The index is: " + getIndex() + "\n");
        showLoader();


         //Task created to download videos in background without blocking UI
         Task downloadVideoTask = new Task<Void>() {
            @Override
            public Void call() {
               //SIMULATE A FILE DOWNLOAD
                videoFileDownload();
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                     e.printStackTrace();
               }
              return null;
            }
         };

         new Thread(downloadVideoTask).start();

        downloadVideoTask.setOnSucceeded(taskFinishEvent ->{showLoader(); /*isButtonClicked="0";*/});
  });
}
public void showtailsbutton(){
btnSMDetails.addEventHandler(MouseEvent.MOUSE_单击,(e)->{
System.out.println(“\n”+”索引为:“+getIndex()+”\n”);
showLoader();
//创建用于在后台下载视频而不阻塞用户界面的任务
任务下载VideoTask=新任务(){
@凌驾
公开作废通知(){
//模拟文件下载
视频文件下载();
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
返回null;
}
};
新线程(下载VideoTask).start();
downloadVideoTask.setOnSucceed(taskFinishEvent->{showLoader();/*isButtonClicked=“0”*/});
});
}

列表单元格与基础列表不存在一对一关系。仅实例化了足够的listcells来填充listview的视口,再加上几个额外的listcells。数据通过updateCell方法在ListCell中交换

因此,不能将数据存储在listcell中,因为如果滚动列表,该单元格将被重新用于另一个列表项


您需要做的是在基础列表项中存储对任务的引用。修改updateCell方法,将listcell中进度条的可见性和值绑定到task progress属性

这个问题似乎有点太宽泛了——你所说的确定任务是什么意思?据推测,每个
任务
都必须有它下载的视频的URL——仅此一项就足够了。另一种方法是在创建时分配ID,或者简单地使用引用相等。您想实现什么?@sillyfly在下载视频时,listcell被禁用,并显示进度条。但是,当我向下滚动到该单元格,然后返回到该单元格时,该单元格将不再被禁用,并且不会显示进度条。因此,我想告诉listcell不要更新按下下载按钮的单元格。一位朋友告诉我,这可以通过使用Task和存储taskCreate来实现,它演示了您试图解决的实际问题。