一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java SwingWorkder使用實例

Java SwingWorkder使用實例

2019-11-20 15:25Java教程網 JAVA教程

最近在學習Swing,我們都知道在UI表現線程里面長時間執行操作時,畫面會假死,為了能夠讓費時操作不影響畫面表現,就需要用多線程了

首先考慮的就是Swing內部的 SwingWorkder對象,但是網上現成的例子不好找,主要參照了網上的資料,自己整理了一個。

注意:SwingWorkder對象只能執行一次,不能重復執行!例如點擊開始,結束后,就不能再次開始了。

復制代碼代碼如下:

import java.awt.BorderLayout;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.*;
import javax.swing.SwingWorker;

public class SwingWorkerSample {

    public static void main(String[] args) {

        // 外觀定義
        try {
            UIManager
                    .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception ex) {
        }

        // 窗體
        JFrame f = new JFrame("SwingWorker Sample");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 表示區
        final JTextArea taOutput = new JTextArea(15, 30);
        JScrollPane sp = new JScrollPane(taOutput);
        f.add(sp);

        // 底部進度條
        final JProgressBar progressBar = new JProgressBar();
        f.add(BorderLayout.SOUTH, progressBar);

        // 開始按鈕
        JButton b = new JButton("開始");
        f.add(BorderLayout.NORTH, b);

        // 結束按鈕
        JButton b2 = new JButton("結束");
        f.add(BorderLayout.AFTER_LINE_ENDS, b2);

        // SwingWorker類
        final SwingWorker<Integer, int[]> sw = new SwingWorker<Integer, int[]>() {

            /** 執行操作 */
            @Override
            protected Integer doInBackground() throws Exception {

                int sum = 0;

                if (!this.isCancelled()) {

                    for (int i = 1; i <= 10; ++i) {
                        sum += i;
                        publish(new int[] { i, sum });// 調用表示中間結果
                        setProgress(i * 10);// 進度條
                        Thread.sleep(1000);
                    }

                }
                return sum;
            }

            /** 表示中間結果 */
            @Override
            protected void process(List<int[]> chunks) {
                StringBuilder sb = new StringBuilder();
                for (int[] values : chunks) {
                    sb.append(String.format("累加%d等于%d%n", values[0], values[1]));
                }
                taOutput.append(sb.toString());
            }

            /** 處理完成 */
            @Override
            protected void done() {

                if (this != null && !this.isDone()) {
                    try {
                        int result = get();
                        taOutput.append("完了。 合計" + result + "\n");
                    } catch (InterruptedException ex) {
                    } catch (ExecutionException ex) {
                    }
                }
            }

        };

        // 進度條表示
        sw.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if ("progress".equals(evt.getPropertyName())) {
                    progressBar.setValue((Integer) evt.getNewValue());
                }
            }
        });

        // 開始按鈕事件
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                sw.execute();// 異步調用SwingWorkder
            }
        });

        // 結束按鈕
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (sw != null && !sw.isDone()) {
                    // Cancel
                    sw.cancel(true);
                }

                JOptionPane.showMessageDialog(null, "結束!");
            }
        });

        // 窗體表示
        f.pack();
        f.setVisible(true);
    }
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一级毛片潘金莲的奶头 | 香港论理午夜电影网 | 精品视频在线播放 | 欧美日韩精品一区二区三区视频 | 热辣小秘书办公室 | 成人永久免费 | 91庥豆果冻天美精东蜜桃传媒 | 精品一区二区三区免费毛片 | 国产成人精品高清在线 | 国产精品毛片高清在线完整版 | 亚洲国产精品久久人人爱 | 国产成人亚洲精品一区二区在线看 | 欧美一级片免费在线观看 | 成人国产精品一级毛片视频 | 国产性tv国产精品 | 男女性潮高片无遮挡禁18 | 国产japanese孕妇孕交 | www.羞羞视频| 日本在线观看视频 | 性欧美video 性满足久久久久久久久 | 爱爱小视频免费看 | 欧美大陆日韩一区二区三区 | sxx免费看观看美女 sss亚洲国产欧美一区二区 | 高h细节肉爽文办公室 | a黄毛片 | 高清不卡一区二区 | 欧美一级片在线视频 | 麻豆视频免费在线观看 | 性派对xxxhd| 波多野结衣快播 | 国产精品亚洲片在线不卡 | 亚洲国产资源 | 精品一区二区三区免费站 | 99视频网址 | 毛片手机在线视频免费观看 | 久久婷婷电影网 | 无人影院在线播放视频 | 免费日本在线视频 | 人人艹在线视频 | 日本护士厕所xxx | 天天爱天天做天天爽天天躁 |