-3
我有一个包含URL的ListView。当用户点击其中一个网址时,会下载一个视频。我正在调用一个Task中的视频下载函数,该函数又是在一个线程中调用的。用户可以点击多个视频网址并开始下载视频。将为每个视频创建一个单独的任务。我想知道的是如何唯一标识每个视频的任务?如何唯一标识javafx中的每个任务?
功能下载视频:
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";*/});
});
}
这个问题似乎有点过于宽泛 - 您是通过识别任务意味着什么?据推测,每个“任务”必须具有它下载的视频的URL - 这可能就足够了。另一种方法是在创建时分配一个ID,或者简单地使用引用相等。你想达到什么目的? – Itai
@sillyfly在下载视频时,listcell被禁用,并显示进度条。但是,当我一直向下滚动,然后返回到该单元格时,它不再被禁用,并且不显示进度条。所以,我想告诉listcell不要更新下载按钮被按下的单元格。一位朋友告诉我,这可以通过使用任务和存储任务来实现 –
创建一个[MCVE]来演示您试图解决的实际问题。 –