URL이 포함 된 ListView가 있습니다. 사용자가 URL 중 하나를 클릭하면 비디오가 다운로드됩니다. 스레드에서 차례로 호출되는 Task 내에서 비디오 다운로드 기능을 호출합니다. 사용자가 여러 개의 비디오 URL을 클릭하면 비디오가 다운로드되기 시작합니다. 각 비디오에 대해 별도의 작업이 생성됩니다. 내가 알고 싶은 것은 각 비디오에 대해 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]를 만듭니다. –