Java SwingWorkder使用实例

首先考虑的就是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);
    }
}

(0)

相关推荐

  • java swing标准对话框具体实现

    复制代码 代码如下: package test001;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JToolBar;public class TestJOptionPane implements

  • Java Swing 非常漂亮外观Nimbus的使用方法实例

    Java Swing界面外观的一种,在Java 6 Update 10中首次亮相.当 Swing 古老的 Metal界面外观 首次发布时,其主要的美感竞争来自 Windows 95 界面.在十年前的图形用户界面条件下,Metal 界面 相对于当时的其他普通界面来说是一种很有吸引力的高雅的选择.Java SE 5 中更新的 Ocean 主题帮助 Metal 成为目前可行的选择,但是修改 Swing 跨平台界面外观也已是当务之急.进入 Nimbus 界面外观,可以看到崭新的基于 合成 的现代外观.N

  • 跟我学Java Swing之游戏设计(2)

    文章来源:电脑爱好者 作者:张剑 还记得<偷天换日>中精灵般穿梭在好莱坞车流中的Minicooper吗?马克·沃尔伯格和莎莉·赛隆就是驾驶着它在仇人的鼻子底下运走了价值千万的黄金.可是,如果现在将一辆无法奔驰的Minicooper躯壳放在你的面前,你会如何看待它?它还是那个游走自如的精灵吗?今天,就让我们一点一点地为这辆Minicooper组装上零件,让它跑起来. 前言 从本期开始,我们为大家提供完整的游戏源代码(点击下载).Java咖啡馆倡导大家理论与实践并重,我们在连载中将给大家介绍关键技

  • 跟我学Java Swing之游戏设计(1)

    文章来源:电脑爱好者 作者:张剑 谁知道通天的巴比伦塔耗费了多少沙石?又有谁知道罗马的建成经历了多少个日夜?我们惟一知道的是,没有一块块砖石的垒砌,就没有蜿蜒万里的长城;没有巨石和黏土的堆集,就没有亘古不变的金字塔.由此可见,基础知识的准备对于我们学习任何事物都至关重要,那么,就让我们从认识Swing的一些基础功能开始,启动我们建造罗马的伟大工程吧! 前言 Java咖啡馆已经开张不少时日了,如果你已经喜欢上了Java这杯咖啡的味道,那么记得常来哦.这一次,我们为大家准备了一大杯香浓的咖啡--将以

  • java swing编程入门代码编写(java编程入门)

    Swing编程基本流程 第一步: 取得主窗体 复制代码 代码如下: JFrame jf = new JFrame("Demo1"); 第二步:获得主窗体的容器 复制代码 代码如下: Container c = jf.getContentPane(); 第三步:设置容器布局 复制代码 代码如下: c.setLayout(new FlowLayout(FlowLayout.LEFT,20,20)); 第四步:添加组件及设置组件属性 复制代码 代码如下: JLabel label1 = ne

  • Java Swing中的JButton、JComboBox、JList和JColorChooser组件使用案例

    Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件. Swing 的基本组件: 1.按钮(JButton): Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮. (1).JButton 常用的构造方法. JButton(String text):按钮上显示字符. JButton(Icon icon) :按钮上显示图标. JButton(String text, Icon icon):按钮上既显示图标

  • Java基于Swing实现的打猎射击游戏代码

    本文实例讲述了Java基于Swing实现的打猎射击游戏代码.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; public class BackgroundPanel extends JPanel {         private static final long serialVersionUID

  • 使用java swing实现qq登录界面示例分享

    用Java Swing做的一个QQ登录界面 复制代码 代码如下: import java.awt.Container;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • Java SwingWorkder使用实例

    首先考虑的就是Swing内部的 SwingWorkder对象,但是网上现成的例子不好找,主要参照了网上的资料,自己整理了一个. 注意:SwingWorkder对象只能执行一次,不能重复执行!例如点击开始,结束后,就不能再次开始了. 复制代码 代码如下: import java.awt.BorderLayout;import java.awt.event.*;import java.beans.PropertyChangeEvent;import java.beans.PropertyChange

  • Java多线程ForkJoinPool实例详解

    引言 java 7提供了另外一个很有用的线程池框架,Fork/Join框架 理论 Fork/Join框架主要有以下两个类组成. * ForkJoinPool 这个类实现了ExecutorService接口和工作窃取算法(Work-Stealing Algorithm).它管理工作者线程,并提供任务的状态信息,以及任务的执行信息 * ForkJoinTask 这个类是一个将在ForkJoinPool执行的任务的基类. Fork/Join框架提供了在一个任务里执行fork()和join()操作的机制

  • java 抽象类的实例详解

    java 抽象类的实例详解 前言: 什么是抽象类?这名字听着就挺抽象的,第一次听到这个名字还真有可能被唬住.但是,就像老人家所说的,一切反动派都是纸老虎,一切有着装x名字的概念也是纸老虎.好吧,我们已经从战略上做到了藐视它,现在就要战术上重视它,如同要解决纸老虎,就要一个牙齿一个牙齿地敲,一个爪子一个爪子地拔:解决这种抽象概念也一样,先要把它具体化,细分化,然后一个一个地来. 我一般遇到新的概念都会问三个问题: 1.这个东西有什么用?用来干什么的?它的意义在哪里?(显然,如果是没用的东西,就没必

  • Java 多线程优先级实例详解

    Java 多线程优先级实例详解 线程的优先级将该线程的重要性传递给调度器.尽管CPU处理现有线程集的顺序是不确定的,但是调度器将倾向于让优先权最高的线程先执行. 你可以用getPriority()来读取现有线程的优先级,并且在任何时刻都可以通过setPriority()来修改优先级. import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SimplePrio

  • java LinkedList的实例详解

    java LinkedList的实例详解 站在Java的角度看,玩队列不就是玩对象引用对象嘛! 实例代码: public class LinkedList<E> implements List<E>, Deque<E> { Node<E> first; Node<E> last; int size; public boolean add(E e) { final Node<E> l = last; final Node<E>

  • Java 反射机制实例详解

    Java 反射机制实例详解 一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,Java和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反射.通过反射,Java可以于运行时加载.探知和使用编译期间完全求和的类.生成其对象实体,调用其方法或者对属性设值.所以Java算是一个半动态的语言吧. 反射的概念: 在Java中的反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对

  • java回调机制实例详解

    java回调机制实例详解 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式: Class A实现接口CallBack callback--背景1 class A中包含一个class B的引用b --背景2 clas

  • Java编程小实例—数字时钟的实现代码示例

    本文的实例是Java编程实现一个数字时钟,代码测试可用,练练手吧.代码如下: package me.socketthread; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Calendar; import java.util.GregorianCalenda

  • Java回调函数实例代码详解

    首先说说什么叫回调函数? 在WINDOWS中,程序员想让系统DLL调用自己编写的一个方法,于是利用DLL当中回调函数(CALLBACK)的接口来编写程序,使它调用,这个就 称为回调.在调用接口时,需要严格的按照定义的参数和方法调用,并且需要处理函数的异步,否则会导致程序的崩溃. 这样的解释似乎还是比较难懂,这里举个简 单的例子: 程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到

  • Java 比较字符串实例详解

     Java 比较字符串实例详解 公司让实现一个自动清除1小时内数据,SQL不熟悉,无奈之下,只能本地DB存储当前时间+小时去和当前时间进行比对.折腾好半天,突然想到Java提供了一个方法,也是进行字符串比较的,傻眼了.一起来看看吧~ CompareTo()方法简介 首先,它属于java.lang.String包下,是Java提供的一个字符串比较的方法,详情介绍如下: CompareTo()返回值: int 返回值类型分别有三种,小于0,等于0,大于0 1. 如果字符串相等返回值0: 2. 如果第

随机推荐