Java如何使用SwingWorker执行后台任务?

该演示给出了使用SwingWorker该类的示例。目的SwingWorker是实现一个后台线程,您可以使用该线程执行耗时的操作,而不会影响程序GUI的性能。

package org.nhooo.example.swing;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.SwingUtilities;

import javax.swing.SwingWorker;

import javax.swing.WindowConstants;

import java.awt.Dimension;

import java.awt.FlowLayout;

public class SwingWorkerDemo extends JFrame {

    public SwingWorkerDemo() {

        initialize();

    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(() -> new SwingWorkerDemo().setVisible(true));

    }

    private void initialize() {

        this.setLayout(new FlowLayout());

        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        JButton processButton = new JButton("Start");

        JButton helloButton = new JButton("Hello");

        processButton.addActionListener(event -> {

            LongRunProcess process = new LongRunProcess();

            try {

                process.execute();

            } catch (Exception e) {

                e.printStackTrace();

            }

        });

        helloButton.addActionListener(e ->

            JOptionPane.showMessageDialog(null, "Hello There"));

        this.getContentPane().add(processButton);

        this.getContentPane().add(helloButton);

        this.pack();

        this.setSize(new Dimension(300, 80));

    }

    static class LongRunProcess extends SwingWorker<Integer, Integer> {

        protected Integer doInBackground() {

            int result = 0;

            for (int i = 0; i < 10; i++) {

                try {

                    result += i * 10;

                    System.out.println("Result = " + result);

                    // 睡眠一段时间以模拟一个漫长的过程

                    Thread.sleep(5000);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

            return result;

        }

        @Override

        protected void done() {

            System.out.println("LongRunProcess.done");

        }

    }

}

                       

以上是 Java如何使用SwingWorker执行后台任务? 的全部内容, 来源链接: utcz.com/z/326333.html

回到顶部