我想做一个小的textEditor。它将包含两个文本区域,一个用于输入文本,另一个用于错误显示。据我所知,SwingWorker在后台工作,所以UI更新不会有延迟。为了检查,我写了下面的代码,插入了5000行,并尝试输入,我认为随着行数的增加,textEditor2中的更新变得非常缓慢。swingworker的实现在代码中是否正确?
textEditor1和textEditor2是JTextarea
private void editorKeyPressed(java.awt.event.KeyEvent evt) {
SwingWorker worker = new SwingWorker<Void, Void>() {
String text = null;
@Override
protected Void doInBackground() throws Exception {
text = textEditor1.getText().toString();
return null;
}
@Override
protected void done() {
try {
get();
textEditor2.setText(text);
} catch (Exception ex) {
System.out.println(ex);
}
}
};
worker.execute();
}发布于 2012-02-23 05:39:41
你每次按下这个键都会产生工作线程,我想这就是为什么你会看到性能下降的原因。
您仍然需要管理正在执行的线程的数量,以保持UI响应性。如果你想让你的后台任务一直运行,设置你自己的线程,并使用并发包中的一个类来简化将数据从事件线程传递出去的过程(例如ArrayBlockingQueue)。
发布于 2012-02-23 05:22:56
对于此任务,您不应使用SwingWorker。只需在一个线程中完成。
private void editorKeyPressed(java.awt.event.KeyEvent evt) {
text = textEditor1.getText();
textEditor2.setText(text);
}https://stackoverflow.com/questions/9403118
复制相似问题