JavaFX - 我可以完全终止或终止任务吗?

时间:2017-07-13 14:39:08

标签: java javafx task

目前,我有一个执行任务的程序(导入文件)。执行时,会弹出一个Dialog,显示Progress with ProgressBar。对话框包含一个“取消”按钮,可以在按下时取消执行任务。但是如果我再次启动任务(我在取消上次导入后尝试再次导入文件),不仅任务开始,而且最后一项任务我取消了继续。我不知道这对文件的输出是否有任何影响,但我仍然想知道:我可以完全杀死或终止任务吗?

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();
}

1 个答案:

答案 0 :(得分:0)

您无法终止任务。如果使用方法isCancelled()取消,您只能取消它并检入此任务。

让我引用文档:

  

在循环体中检查isCancelled()是至关重要的,否则开发人员可能会取消该任务,但该任务将继续运行并更新进度并从调用方法结束返回不正确的结果。正确实施任务将始终检查取消。