如何在javafx中唯一地标识每个任务?
我有一个包含URL的列表视图。当用户单击其中一个URL时,将下载视频。我在一个任务中调用视频下载函数,而这个任务又在一个线程中调用。用户可以点击多个视频URL,视频将开始下载。将为每个视频创建一个单独的任务。我想知道的是如何唯一地识别每个视频的任务 下载视频的功能:如何在javafx中唯一地标识每个任务?,java,javafx,concurrency,task,Java,Javafx,Concurrency,Task,我有一个包含URL的列表视图。当用户单击其中一个URL时,将下载视频。我在一个任务中调用视频下载函数,而这个任务又在一个线程中调用。用户可以点击多个视频URL,视频将开始下载。将为每个视频创建一个单独的任务。我想知道的是如何唯一地识别每个视频的任务 下载视频的功能: public void videoFileDownload(){ try { videoDownloadUrl = lblURL.getText().toString();
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来实现,它演示了您试图解决的实际问题。