0
目前,我有一個執行任務的程序(一個文件被導入)。在執行時,會彈出一個對話框,顯示ProgressBar的進度。該對話框包含一個「取消」按鈕,可在按下時取消該任務的執行。但是如果我再次啓動任務(我試圖在取消最後一次導入後再次導入文件),不僅任務開始,而且最後一個任務我取消了連續。我不知道這是否對文件的輸出有任何影響,但我仍然想知道:我可以完全終止一個任務嗎?JavaFX - 我可以完全終止一個任務嗎?
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
if(chat.getName().contains("KakaoTalk_")) {
String s = "";
String gesamt = "";
double laenge = 0;
try(BufferedReader brCount = new BufferedReader(new FileReader(chat))) {
while((s=brCount.readLine())!=null) {
laenge++;
if(isCancelled()) {
break;
}
}
} catch (IOException e) {
System.out.println("Fehler beim zählen");
}
double berechneLaenge = 0;
double berechneProzentLaenge = 0;
try(BufferedReader brCount = new BufferedReader(new FileReader(chat))) {
while((s=brCount.readLine())!=null) {
if(isCancelled()) {
break;
}
berechneLaenge++;
berechneProzentLaenge = (berechneLaenge/laenge)*100;
prozentOderSo.set(String.valueOf((int)berechneProzentLaenge));
}
} catch (IOException e) {
System.out.println("Fehler beim zählen");
}
double momentanErreicht = 0;
try(BufferedReader br = new BufferedReader(new FileReader(chat))) {
while((s=br.readLine())!=null) {
momentanErreicht++;
updateProgress(momentanErreicht, laenge);
int p = (int)((momentanErreicht/laenge)*100);
prozentImported.set(p);
s = s.replace("ß", "ß");
s = s.replace("ö", "ö");
s = s.replace("ü", "ü");
s = s.replace("ä", "ä");
s = s.replace("Ä", "Ä");
s = s.replace("Ü", "Ü");
s = s.replace("Ö", "Ö");
gesamt += s+"\n";
}
} catch (FileNotFoundException e1) {
System.out.println("File not found");
} catch (IOException e2) {
System.out.println("IOException");
}
mp.eingabeSetText(gesamt);
setChat(mp.eingabeGetText());
getChat();
} else mp.mhNichtPassendesFile();
return null;
}
};
mp.progressP().bind(task.progressProperty());
mp.startFortschrittDialog();
task.setOnFailed(mteh);
Thread th = new Thread(task);
th.setDaemon(true);
this.task = task;
th.start();
}
所以,感謝您的解釋,但我如何確保任務不會繼續運行?我把當前的代碼放在問題中。 – Korlimann
我想,你可以用'isAlive()'方法檢查你的線程狀態。 –
@Korlimann你確實看到了第一句引用的句子,是嗎? 「在循環體中檢查isCancelled()是至關重要的,否則開發人員可能會取消該任務,但該任務將繼續運行......」在循環中檢查isCancelled()。 – VGR