JavaFX在循环中更新TextField

时间:2017-03-29 10:19:48

标签: java multithreading user-interface javafx task

我的应用程序JavaFX有问题。

图片:https://picload.org/image/rlwpwdgi/javafx.png

按钮(1)显示第二个窗口。 使用键(2)开始在路径中搜索。 我需要将TextField(3)更新为搜索查找文件。 在第二个窗口的Controller类中,按钮(2)执行此方法。

public void startSuchen() {

    String text = textFieldPfad.getText();
    if (text.length() > 0) {

        dateiGef = 0;
        dateiGes = 0;

        listf(pfad);

        textFieldDateiGef.setText(String.valueOf(dateiGef));
        textFieldDateiGes.setText(String.valueOf(dateiGes));        

    }

}

这是程序listf

private void listf(File directory) {

    try {

        File[] fileList = directory.listFiles();

        for (File file : fileList) {

            // Platform.runLater(new Runnable() {
            //      @Override
            //      public void run() {
            //          textFieldDateiGef.setText(String.valueOf(getDateiGef()));
            //          textFieldDateiGes.setText(String.valueOf(getDateiGes()));
            //      }
            //  });

            // Thread thrd = new Thread() {
            //      public void run() {
            //          Platform.runLater(new Runnable() {
            //              @Override
            //              public void run() {
            //                      textFieldDateiGef.setText(String.valueOf(getDateiGef()));
            //                  textFieldDateiGes.setText(String.valueOf(getDateiGes()));
            //              }
            //          });
            //      }
            // };
            // thrd.start();

            if (file.isFile()) {

                dateiGes += 1;

                String fileName = file.getName().toLowerCase();
                String nome = textFieldName.getText().toLowerCase();

                Pattern r = Pattern.compile(nome);
                Matcher m = r.matcher(fileName);
                if (m.find()) {
                    dateiGef += 1;
                }

            } else if (file.isDirectory()) {
                listf(file);
            }

        }

    } catch (NullPointerException e) {
        System.out.println(e.getMessage());
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

注释行是我更新GUI的测试,我也尝试过使用Task,但不幸的是它不起作用。有人请帮我理解为什么?

以下是解决方案:

public void startSuchen() {

    String text = textFieldPfad.getText();
    if (text.length() > 0) {

        dateiGef = 0;
        dateiGes = 0;

        // Solution
        new Thread(() -> listf(pfad)).start(); 
        // End Solution    

        textFieldDateiGef.setText(String.valueOf(dateiGef));
        textFieldDateiGes.setText(String.valueOf(dateiGes));        

    }

}

这是程序listf

private void listf(File directory) {

    try {

        File[] fileList = directory.listFiles();

        for (File file : fileList) {

            // Solution
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    textFieldDateiGef.setText(String.valueOf(getDateiGef()));
                    textFieldDateiGes.setText(String.valueOf(getDateiGes()));
                }
            });
           // End Solution

            if (file.isFile()) {

                dateiGes += 1;

                String fileName = file.getName().toLowerCase();
                String nome = textFieldName.getText().toLowerCase();

                Pattern r = Pattern.compile(nome);
                Matcher m = r.matcher(fileName);
                if (m.find()) {
                    dateiGef += 1;
                }

            } else if (file.isDirectory()) {
                listf(file);
            }

        }

    } catch (NullPointerException e) {
        System.out.println(e.getMessage());
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

非常感谢 James_D

0 个答案:

没有答案