强制重新加载组件JSwing上的更改

时间:2016-03-16 14:55:48

标签: java swing desktop-application

我制作了一个代码来删除用户个人资料中的adobe目录,我用它远程连接远程计算机。在此代码中,当一个文件被删除时,textArea必须显示已删除文件的rute。在System.out.println中,它运行的rute但在递归函数结束之前它不会更改textArea。

我有这个代码。 (抱歉,基本翻译成英文)

private void RecursiveDel(String rute) {
        File tdel = new File(rute);
        if (tdel.isDirectory()) {
            for (File del : tdel.listFiles()) {
                RecursiveDel(del.getAbsolutePath());
            }
        }
        txtInform += "Removing: " + ruta + "\r\n";
        ActRes();
        tdel.delete();
        System.out.println(rute);
        if (tdel.exists()) {
            txtInforme += "File isn't deleted: \r\n" + ruta + "\r\n";
            ActRes();
            Correct = false;
        }
    }
    private void ActRes(){
        Thread act = new Thread(new  Runnable() {
            @Override
            public void run() {
                txtResult.setText(txtInforme);
            }
        });
        act.start();
    }

我如何才能将已删除的文件显示到TextArea中意味着递归函数是否有效?

1 个答案:

答案 0 :(得分:2)

  

它会运行,但在递归函数结束之前它不会更改textArea。

更正,因为您的代码循环遍历所有目录并构建字符串,而不是尝试更新每个目录的文本区域。

相反,您应该在找到它时使用SwingWorker并“发布”目录。然后,每次发布值时,都可以更新文本区域。

阅读Tasks That Have Interim Results上Swing教程中的部分,了解此方法的示例。