最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java SwingWorkder使用實例

 更新時間:2014年04月22日 13:02:50   作者:  
最近在學習Swing,我們都知道在UI表現線程里面長時間執(zhí)行操作時,畫面會假死,為了能夠讓費時操作不影響畫面表現,就需要用多線程了

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

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

復制代碼 代碼如下:

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);

        // 表示區(qū)
        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[]>() {

            /** 執(zhí)行操作 */
            @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);
    }
}

相關文章

  • JavaWeb實現文件上傳功能詳解

    JavaWeb實現文件上傳功能詳解

    這篇文章主要介紹了JavaWeb實現文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring Mvc下實現以文件流方式下載文件的方法示例

    Spring Mvc下實現以文件流方式下載文件的方法示例

    這篇文章主要介紹了Spring Mvc下實現以文件流方式下載文件的方法示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java實現一個簡易聊天室流程

    Java實現一個簡易聊天室流程

    這篇文章主要介紹了我的java課程設計一個多人聊天室(socket+多線程)本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • MySQL查詢字段實現字符串分割split功能的示例代碼

    MySQL查詢字段實現字符串分割split功能的示例代碼

    本文主要介紹了MySQL查詢字段實現字符串分割split功能的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • JAVA泛型之泛型方法的定義和使用方式

    JAVA泛型之泛型方法的定義和使用方式

    這篇文章主要介紹了JAVA泛型之泛型方法的定義和使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java十分鐘精通類?封裝?繼承

    Java十分鐘精通類?封裝?繼承

    基礎不牢地動山搖,類、封裝、繼承是我們在學習基礎時必然要碰到的知識點,讓我們一起來學習或回顧一下,感興趣的伙伴來看看吧
    2022-03-03
  • SpringBoot 回滾操作的幾種實現方式

    SpringBoot 回滾操作的幾種實現方式

    回滾操作是一種常見的操作,用于撤銷之前執(zhí)行的操作,本文主要介紹了SpringBoot回滾操作的幾種實現方式,包含基于異常類型的回滾、基于自定義邏輯的回滾和基于數據庫狀態(tài)的回滾,感興趣的可以了解一下
    2024-03-03
  • java后臺發(fā)起get請求獲取響應數據

    java后臺發(fā)起get請求獲取響應數據

    這篇文章主要為大家詳細介紹了java后臺發(fā)起get請求獲取響應數據,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java的DataInputStream和DataOutputStream數據輸入輸出流

    Java的DataInputStream和DataOutputStream數據輸入輸出流

    這里我們來看一下Java的DataInputStream和DataOutputStream數據輸入輸出流的使用示例,兩個類分別繼承于FilterInputStream和FilterOutputStream:
    2016-06-06
  • SpringBoot集成drools的實現示例

    SpringBoot集成drools的實現示例

    本文主要介紹了SpringBoot集成drools的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05

最新評論

咸宁市| 六枝特区| 徐闻县| 博白县| 靖边县| 淅川县| 寻乌县| 应城市| 柘荣县| 昔阳县| 榆中县| 乳山市| 彩票| 裕民县| 广东省| 平陆县| 溆浦县| 沧州市| 岑溪市| 巴楚县| 西乌珠穆沁旗| 兴山县| 萨嘎县| 彰化市| 鹤壁市| 伊宁县| 贵德县| 大连市| 磐石市| 焦作市| 焉耆| 沈丘县| 夹江县| 稻城县| 织金县| 汉寿县| 安远县| 东安县| 利辛县| 昌邑市| 梨树县|