相关疑难解决方法(0)

等待多个SwingWorkers

请考虑以下代码片段:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import javax.swing.*;

public class TestApplet extends JApplet
{
    @Override
    public void init()
    {
        try
        {
            SwingUtilities.invokeAndWait(new Runnable()
            {
                @Override
                public void run()
                {
                    createGUI();
                }
            });
        }
        catch(InterruptedException | InvocationTargetException ex)
        {
        }
    }

    private void createGUI()
    {
        getContentPane().setLayout(new FlowLayout());
        JButton startButton = new JButton("Do work");
        startButton.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                JLabel label = new JLabel();
                new Worker(label).execute();
            }
        });
        getContentPane().add(startButton);
    }

    private class Worker extends SwingWorker<Void, …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading swingworker wait

11
推荐指数
1
解决办法
6620
查看次数

Java - SwingWorker和SwingUtilities.invokeLater()之间的区别

SwingWorker 用于以下目的:

  • 用于在不同的线程中运行长时间运行的任务,以防止GUI无响应
  • 用于通过done()方法在任务结束时使用长时间运行的任务生成的结果更新GUI .
  • 用于通过任务publish()process()方法生成和发布的中间结果不时更新GUI .

SwingUtilities.invokeLater() 可以执行以下任务:

  • SwingWorker.execute()我们可以执行,而不是从EDT 执行方法,ExecutorService.submit(new MyRunnable())因为它还将创建另一个可以执行长时间运行任务的线程.
  • 为了在任务结束时更新GUI,我们可以在任务结束时放置代码(用done()case1的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode()).
  • 为了在任务中间更新GUI,我们可以将代码(用process()case1的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())放在我们publish()在case1中调用方法的地方.

我问这个问题是因为Java-SwingWorker中指定的问题- 我们可以从其他SwingWorker调用一个SwingWorker而不是EDT可以通过SwingUtilities.invokeLater()但是无法解决SwingWorker

java swingworker swingutilities

9
推荐指数
1
解决办法
7878
查看次数

标签 统计

java ×2

swingworker ×2

multithreading ×1

swing ×1

swingutilities ×1

wait ×1