栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何与Java中的两(2)个SwingWorker类共享数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何与Java中的两(2)个SwingWorker类共享数据

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.List;import java.util.Random;import java.util.concurrent.Executor;import java.util.concurrent.Executors;import javax.swing.AbstractAction;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.SwingUtilities;import javax.swing.SwingWorker;import javax.swing.Timer;import javax.swing.border.EmptyBorder;public class ExecutorAndSwingWorker2 {    private Jframe frame = new Jframe();    private JButton button1;    private JButton button2;    private JButton button3;    private JButton button4;    private JPanel buttonPanel = new JPanel();    private Executor executor = Executors.newCachedThreadPool();    private javax.swing.Timer timer1;    private javax.swing.Timer timer2;    private javax.swing.Timer timer3;    private javax.swing.Timer timer4;    private Random random = new Random();    public ExecutorAndSwingWorker2() {        button1 = new JButton("  Executor + SwingWorker Thread No.1  ");        button1.setFocusable(false);        button2 = new JButton("  Executor + SwingWorker Thread No.2  ");        button3 = new JButton("  Executor + SwingWorker Thread No.3  ");        button4 = new JButton("  Executor + SwingWorker Thread No.4  ");        buttonPanel = new JPanel();        buttonPanel.setBorder(new EmptyBorder(15, 15, 15, 15));        buttonPanel.setLayout(new GridLayout(2, 2, 20, 20));        buttonPanel.add(button1);        buttonPanel.add(button2);        buttonPanel.add(button3);        buttonPanel.add(button4);        frame.setTitle("Shaking Button Demo");        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.setLayout(new BorderLayout());        frame.add(buttonPanel);        frame.setPreferredSize(new Dimension(700, 170));        frame.setLocation(150, 100);        frame.pack();        frame.setVisible(true);        executor.execute(new ExecutorAndSwingWorker2.MyTask("startButton1")); // non on EDT    }    private void startButton1() {        System.out.println("Starting long Thread == startButton1()");        try { Thread.sleep(15000);        } catch (InterruptedException ex) {        }    }    private void startButton2() {        System.out.println("Starting long Thread == startButton2()");        try { Thread.sleep(17500);        } catch (InterruptedException ex) {        }    }    private void startButton3() {        System.out.println("Starting long Thread == startButton3()");        try { Thread.sleep(12500);        } catch (InterruptedException ex) {        }    }    private void startButton4() {        System.out.println("Starting long Thread == startButton4()");        try { Thread.sleep(20000);        } catch (InterruptedException ex) {        }    }    private void colorAction1() {        timer1 = new Timer(1000, new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) {     random = new Random();     SwingUtilities.invokeLater(new Runnable() {         @Override         public void run() {  button1.setBackground(new Color(127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)));  button1.validate();  button1.repaint();         }     }); }        });        timer1.setDelay(500);        timer1.setRepeats(true);        timer1.start();    }    private void colorAction2() {        timer2 = new Timer(1200, new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) {     random = new Random();     SwingUtilities.invokeLater(new Runnable() {         @Override         public void run() {  button2.setBackground(new Color(127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)));  button2.validate();  button2.repaint();         }     }); }        });        timer2.setDelay(500);        timer2.setRepeats(true);        timer2.start();    }    private void colorAction3() {        timer3 = new Timer(1400, new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) {     random = new Random();     SwingUtilities.invokeLater(new Runnable() {         @Override         public void run() {  button3.setBackground(new Color(127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)));  button3.validate();  button3.repaint();         }     }); }        });        timer3.setDelay(500);        timer3.setRepeats(true);        timer3.start();    }    private void colorAction4() {        timer4 = new Timer(1600, new AbstractAction() { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent e) {     random = new Random();     SwingUtilities.invokeLater(new Runnable() {         @Override         public void run() {  button4.setBackground(new Color(127 + random.nextInt(128), 127 + random.nextInt(128), 127 + random.nextInt(128)));  button4.validate();  button4.repaint();         }     }); }        });        timer4.setDelay(500);        timer4.setRepeats(true);        timer4.start();    }    private void endButton1() {        timer1.stop();        button1.setBackground(null);        System.out.println("Long Thread Ends == startButton1()");        executor.execute(new ExecutorAndSwingWorker2.MyTask("startButton3")); // non on EDT    }    private void endButton2() {        timer2.stop();        button2.setBackground(null);        System.out.println("Long Thread Ends == startButton2()");    }    private void endButton3() {        timer3.stop();        button3.setBackground(null);        System.out.println("Long Thread Ends == startButton3()");        executor.execute(new ExecutorAndSwingWorker2.MyTask("startButton2")); // non on EDT        executor.execute(new ExecutorAndSwingWorker2.MyTask("startButton4")); // non on EDT    }    private void endButton4() {        timer4.stop();        button4.setBackground(null);        System.out.println("Long Thread Ends == startButton4()");        executor.execute(new ExecutorAndSwingWorker2.MyTask("startButton1")); // non on EDT    }    private class MyTask extends SwingWorker<Void, Integer> {        private String str;        private String namePr;        private JDialog dialog = new JDialog();        MyTask(String str) { this.str = str; addPropertyChangeListener(new SwingWorkerCompletionWaiter(dialog, str, namePr));        }        @Override        protected Void doInBackground() throws Exception { if (str.equals("startButton1")) {     colorAction1();     startButton1(); } else if (str.equals("startButton2")) {     colorAction2();     startButton2(); } else if (str.equals("startButton3")) {     colorAction3();     startButton3(); } else if (str.equals("startButton4")) {     colorAction4();     startButton4(); } return null;        }        @Override        protected void process(List<Integer> progress) { System.out.println(str + " " + progress.get(progress.size() - 1));        }        @Override        protected void done() { if (str.equals("startButton1")) {     endButton1(); } else if (str.equals("startButton2")) {     endButton2(); } else if (str.equals("startButton3")) {     endButton3(); } else if (str.equals("startButton4")) {     endButton4(); }        }    }    private class SwingWorkerCompletionWaiter implements PropertyChangeListener {        private JDialog dialog;        private String str;        private String namePr;        SwingWorkerCompletionWaiter(JDialog dialog, String str, String namePr) { this.dialog = dialog; this.str = str; this.namePr = namePr;        }        @Override        public void propertyChange(PropertyChangeEvent event) { if ("state".equals(event.getPropertyName()) && SwingWorker.Statevalue.DONE == event.getNewValue()) {     System.out.println("Thread Status with Name :" + str + ", SwingWorker Status is " + event.getNewValue()); } else if ("state".equals(event.getPropertyName()) && SwingWorker.Statevalue.PENDING == event.getNewValue()) {     System.out.println("Thread Status with Mame :" + str + ", SwingWorker Status is " + event.getNewValue()); } else if ("state".equals(event.getPropertyName()) && SwingWorker.Statevalue.STARTED == event.getNewValue()) {     System.out.println("Thread Status with Name :" + str + ", SwingWorker Status is " + event.getNewValue()); } else {     System.out.println("Thread Status with Name :" + str + ", Something wrong happends "); }        }    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() { @Override public void run() {     ExecutorAndSwingWorker2 executorAndSwingWorker = new ExecutorAndSwingWorker2(); }        });    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号