gpt4 book ai didi

java swingworker 线程更新主 Gui

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:12 26 4
gpt4 key购买 nike

您好,我想知道从 swingworkerthread 向 jtextarea 添加文本的最佳方法是什么,我创建了另一个类,jbutton 通过 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.");
}

}

现在 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

看看publishprocess

潜在的意图是,您需要仅在事件调度线程中更新 UI,方法是通过 publish 方法将要更新的数据传递给 UI,SwingWorker 将在 EDT 的上下文中为您调用 process

关于java swingworker 线程更新主 Gui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com