java swingworker线程更新主GUI

您好,我想知道从swingworkerthread向jtextarea添加文本的最佳方法是什么,我创建了另一个类,Threadsclass()。execute()调用了jbutton。并且线程与此代码并行运行

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.");

}

}

现在id要做的是将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

看一下发布和处理

潜在的意图是,您仅需要从事件调度线程中更新UI,通过将要更新的数据通过方法传递到UI

publishSwingWorkerprocess在EDT上下文中要求您

以上是 java swingworker线程更新主GUI 的全部内容, 来源链接: utcz.com/qa/400981.html

回到顶部