use*_*435 5 java swing swingworker
我想知道什么是从swingworkerthread向jtextarea添加文本的最佳方法,我创建了另一个jtton调用Threadsclass().execute(); 并且该代码与该线程并行运行
public class Threadsclass extends SwingWorker<Object, Object> {
@Override
protected Object doInBackground() throws Exception {
for(int x = 0; x< 10;x++)
try {
System.out.println("sleep number :"+ x);
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(eftcespbillpaymentsThreads.class.getName()).log(Level.SEVERE, null, ex);
}
throw new UnsupportedOperationException("Not supported yet.");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我喜欢做的是将x的值添加到主gui的文本区域,任何想法都非常感激.
JavaDocs有一个很好的例子
class PrimeNumbersTask extends
SwingWorker<List<Integer>, Integer> {
PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
//initialize
}
@Override
public List<Integer> doInBackground() {
List<Integer> numbers = new ArrayList<Integer>(25);
while (!enough && !isCancelled()) {
number = nextPrimeNumber();
numbers.add(number);
publish(number);
setProgress(100 * numbers.size() / numbersToFind);
}
return numbers;
}
@Override
protected void process(List<Integer> chunks) {
for (int number : chunks) {
textArea.append(number + "\n");
}
}
}
JTextArea textArea = new JTextArea();
final JProgressBar progressBar = new JProgressBar(0, 100);
PrimeNumbersTask task = new PrimeNumbersTask(textArea, N);
task.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
progressBar.setValue((Integer)evt.getNewValue());
}
}
});
task.execute();
System.out.println(task.get()); //prints all prime numbers we have got
Run Code Online (Sandbox Code Playgroud)
基本意图是您需要仅在事件调度线程内更新UI,publish
方法是通过方法SwingWorker
将要更新的数据传递给UI ,将process
在EDT的上下文中为您调用
在 内doInBackground()
,用于publish(V... chunks)
向 发送数据process(List<V> chunks)
。
归档时间: |
|
查看次数: |
7395 次 |
最近记录: |