java swingworker 线程更新主 Gui

标签 java swing swingworker

您好,我想知道从 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/

相关文章:

java - 在java中绘制多个椭圆

java - Swing Worker 和普通线程之间的区别?

java - SwingWorker 没有响应

java - 编写一次代码并在我想再次运行它时添加引用?

java - 如何将 JScrollpane 添加到 JPanel?

java - 这个SwingWorker是不是没有复用ThreadPoolExecutor中的Threads?

java - 在 Velocity 模板中传递 Java 函数

java - Hibernate 映射包

java - JPQL:SIZE 函数在 EclipseLink 上导致奇怪的异常

java - 使用 DateTimeFormatterBuilder 解析缺失日期的日期,默认为月底