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("\u591A\u7EBF\u7A0B \u8BA1\u7B971!+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("\u8BA1\u7B97\u8FC7\u7A0B");
- 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("\u8FDB\u5EA6\u6761");
- 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("\u8BA1\u7B97\u7ED3\u679C");
- 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("\u5F00\u59CB");
- 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
实验结果:
JAVA多线程程序ProgressBar的更多相关文章
- JAVA多线程程序ProgressBar2
JAVA多线程程序ProgressBar2 题目简介: 思路分析:与上一篇:JAVA多线程程序ProgressBar类似,本篇避免过于冗杂,所以在此没有给出. 实验代码: import java.aw ...
- Java多线程程序休眠、暂停与停止
休眠 在Java多线程中,可以使用sleep()方法在指定毫秒数内让当前正在执行的线程休眠. 下面这段代码,使得主函数的main线程休眠了2000ms,最后输出的间隔时间也是2000ms. p ...
- Java多线程-程序运行堆栈分析
class文件内容 class文件包含JAVA程序执行的字节码:数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符:文件开头有一个0xcafebabe(16进制)特殊的一个标志. ...
- (转载)Java多线程的监控分析工具(VisualVM)
原文链接:http://blog.csdn.net/chendc201/article/details/22905511 在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的 ...
- [转载] java多线程学习-java.util.concurrent详解(一) Latch/Barrier
转载自http://janeky.iteye.com/blog/769965 Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可 ...
- Java多线程异常处理
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...
- 【java多线程系列】java内存模型与指令重排序
在多线程编程中,需要处理两个最核心的问题,线程之间如何通信及线程之间如何同步,线程之间通信指的是线程之间通过何种机制交换信息,同步指的是如何控制不同线程之间操作发生的相对顺序.很多读者可能会说这还不简 ...
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
- 关于java多线程中异常捕获的理解
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
随机推荐
- 使用remix的solidity在线编译环境部署一个faucet合约
一.浏览器打开https://remix.ethereum.org 地址 点击"+"新建一个sol文件,命名为faucet.sol 然后在代码区输入solidity代码 选择相关插 ...
- Hdu 1564 1*2矩阵覆盖棋局博弈
n*n的矩阵如果n为偶数 则可被1*2的矩形完全覆盖 如果n为奇数 则除起点外 其他各自可被1*2矩形完全覆盖 所以当n为偶数 先手赢 n为奇数 后手赢 #include<bits/stdc++ ...
- 接口数据转json格式
接口数据转json格式 function tojson($result, $callback = null){ header('Content-Type:text/html; charset=utf- ...
- usb发送字节
- 安装及创建python虚拟环境
有点气,是真的有点气,以为安装错误了,没想到是命令问题 参考链接: https://cloud.tencent.com/developer/article/1176291 https://www.cn ...
- solr 倒排索引(转载)
原文地址:http://blog.csdn.net/chichengit/article/details/9235157 http://blog.csdn.net/njpjsoftdev/articl ...
- 什么是JWT?Token与Session的区别?
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...
- TXNLP 33-40
词向量: 回顾基于检索的问答系统 倒排表解决:坑爹的翻译...应该翻译成“反向索引” 常规的索引是文档到关键词的映射: 文档——>关键词但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一 ...
- confirm 弹出信息
if(confirm("真的要删除吗?")){ alert("点击了确认按钮"); } else{ alert("点击了取消按钮"); } ...
- 13. Ajax技术
在传统的Web应用模式中,页面中用户的每一次操作都将触发一次返回Web服务器的HTTP请求,服务器进行相应的处理后,返回一个HTML页面的客户端.而在Ajax应用中,页面中的用户的操作将通过Ajax引 ...