【发布时间】:2017-06-27 09:34:25
【问题描述】:
假设一个程序要执行大量的方法。比如在安装一个软件的安装方法并且你想在JtextArea中跟踪进度。我正在执行一个需要 20 秒或更长时间才能执行的程序。我想在更新间隔为 50 到 100 毫秒的文本区域中显示输出。我该如何实施? 我使用了计时器,但它在程序执行后而不是在执行期间更新了文本区域,并且 java Thread 冻结了 GUI。
temp1.redirectOutput( textArea );
final int i = 0;
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = "";
int i = 0;
while(i < 3000){
str = "aaaa";
System.out.println(str);
i++;
}
System.out.println( new java.util.Date().toString() );
System.err.println( System.currentTimeMillis() );
}
});
timer.start();
【问题讨论】:
-
用
.append(String str)方法怎么样? -
@AndriyRymar 最简单的方法。不,那是行不通的
-
知道了。当我遇到同样的问题时,我只是使用了
List<String>或StringBuilder之类的结构并在那里管理所有新行。然后,当我必须在 UI 上显示日志数据时,我只需将JTextArea中的内容替换为我的结构的最新内容。 -
改用 SwingWorker