zoukankan      html  css  js  c++  java
  • JAVA多线程程序ProgressBar

    JAVA多线程程序ProgressBar

    题目简介:

    思维导图:

    实验代码:建议先看CalThread类,计算线程的实现,再作基本CalFrame类的界面,

                      然后作ReadThread类,结合CalFrame的组件,最后完善CalFrame类

     (代码折叠)

    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import java.awt.BorderLayout;
    import javax.swing.JLabel;
    import java.awt.Font;
    import javax.swing.SwingConstants;
    import javax.swing.JPanel;
    import java.awt.GridLayout;
    import javax.swing.JTextArea;
    import javax.swing.JProgressBar;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    /**
         *@author 李祖林
         */
    public class CalFrame implements ActionListener{
    
        private JFrame frame;
        JTextArea textA,textB;
        JProgressBar progressBar;
        
        JButton button;
    
        
        public CalFrame() {
            
            frame = new JFrame();
            frame.setBounds(100, 100, 755, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(new BorderLayout(0, 0));
            
            
            JLabel label = new JLabel("u591Au7EBFu7A0B u8BA1u7B971!+2!+...+12!");
            label.setHorizontalAlignment(SwingConstants.CENTER);
            label.setFont(new Font("宋体", Font.BOLD, 18));
            frame.getContentPane().add(label, BorderLayout.NORTH);
            
            JPanel panel = new JPanel();
            frame.getContentPane().add(panel, BorderLayout.CENTER);
            panel.setLayout(new GridLayout(3, 2, 0, 0));
            
            JLabel label_1 = new JLabel("u8BA1u7B97u8FC7u7A0B");
            label_1.setFont(new Font("宋体", Font.BOLD, 18));
            label_1.setHorizontalAlignment(SwingConstants.CENTER);
            panel.add(label_1);
            
            textA = new JTextArea();
            textA.setFont(new Font("Courier New", Font.BOLD, 15));
            panel.add(textA);
            
            JLabel label_2 = new JLabel("u8FDBu5EA6u6761");
            label_2.setHorizontalAlignment(SwingConstants.CENTER);
            label_2.setFont(new Font("宋体", Font.BOLD, 18));
            panel.add(label_2);
            
            progressBar = new JProgressBar();
            progressBar.setMaximum(12);
            panel.add(progressBar);
            
            JLabel label_3 = new JLabel("u8BA1u7B97u7ED3u679C");
            label_3.setHorizontalAlignment(SwingConstants.CENTER);
            label_3.setFont(new Font("宋体", Font.BOLD, 18));
            panel.add(label_3);
            
            textB = new JTextArea();
            textB.setFont(new Font("Courier New", Font.BOLD, 18));
            panel.add(textB);
            
            JPanel panel_1 = new JPanel();
            frame.getContentPane().add(panel_1, BorderLayout.SOUTH);
            
            button = new JButton("u5F00u59CB");
            button.setFont(new Font("宋体", Font.BOLD, 18));
            panel_1.add(button);button.addActionListener(this);
            
            frame.setVisible(true);
        }
    
    
        public void actionPerformed(ActionEvent e) {
            /*计算线程 自启动*/
            CalThread calThread = new CalThread();
            
            /*读取线程*/
            ReadThread readThread = new ReadThread(this);    //此处的this是CalFrame类的对象
            Thread thread = new Thread(readThread);            //非自启动:构造扩展线程类的对象,通过Thread()传该类得以实现线程
            thread.start();
        }
        
        public static void main(String[] args) {
            CalFrame calFrame = new CalFrame();
        }
        
    }
    CalFrame
    /**
     * @author 李祖林
     *
     */
    public class ReadThread extends Thread {
        /*成员变量*/
        CalFrame calFrame;
        
        /*(有参与无参)构造函数*/
        public ReadThread() {}
        public ReadThread(CalFrame calFrame) {
            this.calFrame = calFrame;
        }
        
        /*线程开始读取*/
        public void run(){
            while(true){
                calFrame.textA.setText(CalThread.string);                //计算过程
                calFrame.textB.setText(String.valueOf(CalThread.sum));    //计算结果
                calFrame.progressBar.setValue(CalThread.n);                //计算进度
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) { 
                    System.err.println("读取线程ReadThread发送错误!");
                    e.printStackTrace();
                }
            }
        }
    }
    ReadThread
    /**
     * @author 李祖林
     *
     */
    public class CalThread extends Thread {
        static double sum = 1;            
        static String string = "1!";
        static int n = 1;
        Thread thread = null;
        
        /*构造函数  自启动*/
        public CalThread() {
            thread = new Thread(this);
            thread.start();
        }
        
        /*计算n!*/
        double fun(int n){
            double sum = 1;
            for(int i = 1;i <= n;i++){
                sum *= i;
            }
            return sum;
        }
        /*线程开始计算*/
        public void run(){
            while(n<12){
                n++;                                                //进度条进度
                sum += fun(n);                                        //计算结果
                string  = string + "+" + n + "!";                //计算过程
                try {
                    Thread.sleep((int)Math.random()*600 + 300);        //随机300-900毫秒
                } catch (InterruptedException e) {
                    System.err.println("计算线程CalThread出现错误!");
                    e.printStackTrace();
                }
            }
        }
        
    }
    CalThread

     实验结果:

  • 相关阅读:
    python之函数名,闭包、迭代器
    python-函数进阶-动态传参,名称空间,作用域的问题
    python之初识函数
    python之文件处理
    重新执笔,已是大三!Jekyll自定义主题开发
    HDU -2674 N!Again(小技巧)
    HDU -2546饭卡(01背包+贪心)
    NYOJ 1091 超大01背包(折半枚举)
    HDU 5144 NPY and shot(三分法)
    printf用法之打印2进制,八进制,十进制,十六进制
  • 原文地址:https://www.cnblogs.com/jdemarryme/p/7070216.html
Copyright © 2011-2022 走看看