swingworker笔记

swingworker使用说明

1、创建swingworker实例,并在构造函数中引入任务执行的必要参数

    PrimeNumbersTask task = new PrimeNumbersTask(textArea, otherParam);
   
    textArea    用来显示动态的处理结果
    otherParam    其他参数,比如要获取一万个素数,就输入10000

 

    注意:SwingWorker<T, V>, T doInBackground()返回结果类型, V publish()和process() 参数集合中的类型

 

2、添加task的监听程序

    task.addPropertyChangeListener(
            new PropertyChangeListener() {
                public  void propertyChange(PropertyChangeEvent evt) {
                    if ("progress".equals(evt.getPropertyName())) {
                        progressBar.setIndeterminate(false);
                        progressBar.setValue((Integer)evt.getNewValue());
                    }
                }
            });

    swingworker 默认可以监听的事件只有 progress 和  state
   
    progress 事件是由 setProgress()方法执行触发,event.getNewValue()就是
    任务当前的百分比进度,可以直接在 new JProgressBar(0, 100)这样的进度条的
    setValue()方法中使用。

    state 事件是由 swingworker 自动触发,有PENDING、STARTED、DONE三种状态
    分别表示初始状态、已经开始但是还没有执行doInBackground()方法、doInBackground()
    方法执行结束。

3、执行task

    task.execute();

4、可选操作项

    4.1、取得阻塞取得 doInBackground() 的执行结果
       
        task.get();

    4.2、取消正在执行的任务

        task.cancel(true);

5、swingworker内部执行流程

    doInBackground()

        isCancelled() --检测是否有中断请求
        setProgress(int progress)
            firePropertyChange("progress",old,new)
                PropertyChangeListener
        publish(V... chunks)
            process(List<V> chunks)
    done()
   

6、推荐使用检查状态阻塞一个对话框等,不推荐get()阻塞

    public void propertyChange(PropertyChangeEvent event) {
         if ("state".equals(event.getPropertyName())
                 && SwingWorker.StateValue.DONE == event.getNewValue()) {
             dialog.setVisible(false);
             dialog.dispose();
         }
        

你可能感兴趣的:(Integer,任务)