Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX读取文件计数器+;另一个反任务?_Java_Multithreading_Javafx_Task_Counter - Fatal编程技术网

JavaFX读取文件计数器+;另一个反任务?

JavaFX读取文件计数器+;另一个反任务?,java,multithreading,javafx,task,counter,Java,Multithreading,Javafx,Task,Counter,我有一个带有2个标签的UI 第一个标签:所有行 第二个标签:以xxx结尾的行 我的程序读取一个文件,在一个任务中,他读取所有行: public class ReadFileTask extends Task<Void> { @Override protected Void call() throws Exception { File file = new File("comments.txt"); //TODO long lines = Files.lines(

我有一个带有2个标签的UI

第一个标签:所有行 第二个标签:以xxx结尾的行

我的程序读取一个文件,在一个任务中,他读取所有行:

public class ReadFileTask extends Task<Void> {

@Override
protected Void call() throws Exception {

    File file = new File("comments.txt"); //TODO

    long lines = Files.lines(file.toPath()).count();
    long line = 0;
    BufferedReader reader = new BufferedReader(new FileReader(file));
    while ((reader.readLine()) != null) {
        line++;
        updateMessage("" + line);

    }
    return null;
}}
用于第二个标签。但请注意:不要用以下更新充斥GUI线程:

Platform.runLater(()->xxxLabel.setText("" + xxxLines));

有几种方法可以做到这一点。通读包含大量示例的。阅读后尝试其中一种方法,如果仍然有问题,请使用更详细的方法编辑您的问题。我稍后会尝试运行,但问题是,标签位于Controller.class中的gui,任务位于ReadFileTask.class中,当我尝试此方法时,从lambda表达式引用的局部变量必须是final或有效final,我知道我必须阅读更多的文档,但我的英语太差了,我试着阅读谷歌的德语教程,但这很难,没有帮助我从来没有学过这个,大多数时候我学习的是示例代码,但有时对于这样的问题,我找不到示例我真的不明白问题所在吗?你是Java新手吗?您可以将标签与方法和/或构造函数参数一起传递..带有开始按钮的我的控制器现在是您的代码所在站点,在控制器中是static int xxxLines=0;和if(reader.readLine().endsWith(“xxx”){xxxLines++;}。。当我开始工作时,他从静态int读取0。。当我将1放入insite时,gui将显示1,但它不是刷新:/n当我使用静态标签web=new Label()时;在控制器(ui类)中,我没有得到任何异常,但没有得到任何值。。。如果我使用公共静态标签网站;然后我得到了在ReadFileTask中设置的第一个值,但没有刷新,当我将Platform.runLater(..)从ReadFileTask类中的控制器(ui按钮)得到异常,我不知道我为此工作了这么长时间…我说使用
Platform.runLater(…
在您的任务中。或者更具体地说:在您的
任务中
s
call()
方法中,只要您想更新标签。
    public void Datei(ActionEvent event) throws IOException, InterruptedException {
    ReadFileTask task = new ReadFileTask();
    daten.textProperty().bind(task.messageProperty());
    new Thread(task).start();
    Platform.runLater(()->xxx.setText("" + ReadFileTask.xxxLines));

}
Platform.runLater(()->xxxLabel.setText("" + xxxLines));