J'ai un ListView contenant des URL. Lorsqu'un utilisateur clique sur l'une des URL, une vidéo est téléchargée. J'appelle la fonction de téléchargement de vidéo dans une tâche qui à son tour est appelée dans un thread. Un utilisateur peut cliquer sur plusieurs URL de vidéo et la vidéo commencera à télécharger. Une tâche distincte sera créée pour chacune des vidéos. Ce que je veux savoir est comment identifier de manière unique la tâche pour chaque vidéo?Comment identifier de manière unique chaque tâche dans javafx?
Fonction pour télécharger la vidéo:
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...");
}
}
Fonction contenant Tâche:
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";*/});
});
}
La question semble un peu trop large - que voulez-vous dire par l'identification de la tâche? Vraisemblablement, chaque 'Task' doit avoir l'URL de la vidéo qu'il télécharge - cela seul peut être suffisant. Une autre méthode consiste à attribuer un ID lors de la création, ou simplement en utilisant l'égalité de référence. Qu'essayez-vous d'accomplir? – Itai
@sillyfly Pendant le téléchargement de la vidéo, la cellule de liste est désactivée et la barre de progression est affichée. Cependant, lorsque je défile vers le bas et que je reviens dans cette cellule, il n'est plus désactivé et la barre de progression n'est pas affichée. Donc, je veux dire à la cellule de liste de ne pas mettre à jour la cellule dans laquelle le bouton de téléchargement est pressé. Un ami m'a dit que cela peut être réalisé en utilisant Tâche et en stockant la tâche –
Créer un [MCVE] qui montre le problème que vous essayez de résoudre. –