JAVA多线程程序ProgressBar2
JAVA多线程程序ProgressBar2
题目简介:
思路分析:与上一篇:JAVA多线程程序ProgressBar类似,本篇避免过于冗杂,所以在此没有给出。
实验代码:
import java.awt.EventQueue; import javax.swing.JFrame; import java.awt.BorderLayout; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.JPanel; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.rmi.activation.ActivationInstantiator; import javax.swing.JTextArea; import javax.swing.JProgressBar; import java.awt.Font; import javax.swing.JButton; /** * @author 李祖林 * */ public class SumFrame implements ActionListener{ private JFrame frame; JTextArea textA,textB; JButton button; JProgressBar progressBar; public static void main(String[] args) { SumFrame sumFrame = new SumFrame(); } public SumFrame() { frame = new JFrame(); frame.setBounds(100, 100, 1043, 210); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BorderLayout(0, 0)); JLabel label = new JLabel("\u591A\u7EBF\u7A0B 20\u4E2A\u968F\u673A\u6574\u6570\u7684\u548C"); label.setFont(new Font("宋体", Font.BOLD, 18)); label.setHorizontalAlignment(SwingConstants.CENTER); 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("\u8BA1\u7B97\u7B49\u5F0F\r\n"); 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, 10)); panel.add(textA); JLabel label_2 = new JLabel("\u8FDB\u5EA6\u6761"); label_2.setFont(new Font("宋体", Font.BOLD, 18)); label_2.setHorizontalAlignment(SwingConstants.CENTER); panel.add(label_2); progressBar = new JProgressBar(); progressBar.setMaximum(20); panel.add(progressBar); JLabel label_3 = new JLabel("\u8BA1\u7B97\u7ED3\u679C"); label_3.setFont(new Font("宋体", Font.BOLD, 18)); label_3.setHorizontalAlignment(SwingConstants.CENTER); panel.add(label_3); textB = new JTextArea(); textB.setFont(new Font("Courier New", Font.BOLD, 15)); panel.add(textB); JPanel panel_1 = new JPanel(); frame.getContentPane().add(panel_1, BorderLayout.SOUTH); button = new JButton("\u5F00\u59CB"); button.setFont(new Font("宋体", Font.BOLD, 18)); panel_1.add(button);button.addActionListener(this); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { SumThread sumThread = new SumThread(); ReadThread readThread = new ReadThread(this); Thread thread = new Thread(readThread); thread.start(); } }
/** * @author 李祖林 * */ public class ReadThread extends Thread { SumFrame sumFrame; ReadThread(){} ReadThread(SumFrame sumFrame){ this.sumFrame = sumFrame; } public void run(){ while(true){ sumFrame.textA.setText(SumThread.string); sumFrame.progressBar.setValue(SumThread.n); sumFrame.textB.setText(String.valueOf(SumThread.sum)); try { Thread.sleep(1000); } catch (InterruptedException e) { System.err.println("读取线程ReadThread发生错误!"); e.printStackTrace(); } } } }
/** * @author 李祖林 * */ public class SumThread extends Thread{ static double sum = 0; static int n = 0; static String string = "sum = 0;\nsum = 0"; int tmp; SumThread(){ Thread thread = new Thread(this); thread.start(); } public void run(){ while(n<20){ n++; tmp = (int)(Math.random()*1000); sum += tmp; string = string + "+" + tmp; try { Thread.sleep((int)Math.random()*600 + 300); } catch (InterruptedException e) { System.err.println("计算线程发生错误!"); e.printStackTrace(); } } } }
实验结果: