現在、タスクを実行するプログラムがあります(ファイルがインポートされます)。実行中に、ProgressBarで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