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的更多相关文章

  1. JAVA多线程程序ProgressBar2

    JAVA多线程程序ProgressBar2 题目简介: 思路分析:与上一篇:JAVA多线程程序ProgressBar类似,本篇避免过于冗杂,所以在此没有给出. 实验代码: import java.aw ...

  2. Java多线程程序休眠、暂停与停止

    休眠   在Java多线程中,可以使用sleep()方法在指定毫秒数内让当前正在执行的线程休眠.   下面这段代码,使得主函数的main线程休眠了2000ms,最后输出的间隔时间也是2000ms. p ...

  3. Java多线程-程序运行堆栈分析

    class文件内容 class文件包含JAVA程序执行的字节码:数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符:文件开头有一个0xcafebabe(16进制)特殊的一个标志. ...

  4. (转载)Java多线程的监控分析工具(VisualVM)

    原文链接:http://blog.csdn.net/chendc201/article/details/22905511 在Java多线程程序运行时,多数情况下我们不知道到底发生了什么,只有出了错误的 ...

  5. [转载] java多线程学习-java.util.concurrent详解(一) Latch/Barrier

    转载自http://janeky.iteye.com/blog/769965     Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可 ...

  6. Java多线程异常处理

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...

  7. 【java多线程系列】java内存模型与指令重排序

    在多线程编程中,需要处理两个最核心的问题,线程之间如何通信及线程之间如何同步,线程之间通信指的是线程之间通过何种机制交换信息,同步指的是如何控制不同线程之间操作发生的相对顺序.很多读者可能会说这还不简 ...

  8. Java多线程概念简介 多线程中篇(一)

    Java的线程与操作系统的线程   在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...

  9. 关于java多线程中异常捕获的理解

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

随机推荐

  1. 四、指定Nginx启动用户

    一.nginx指定启动用户 1.参考宝塔的配置 解释:(linux权限管理) 指定用www用户启动nginx,如果你用root启动nginx,万一nginx有漏洞,被提权了,你服务器就GG了 所以指定 ...

  2. Linux ping route nslookup ifconfig arp traceroute

    route -n  查看默认网关 ping  -c 包个数 ping -s 包大小 host  目标主机 主机解析 nslookup  目标主机 arp -an 查看arp arp -s IP地 MA ...

  3. Thymeleaf初探

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  4. 22_6mybatis中的缓存

    1.mybatis中的延时加载 问题:在一对多中,当我们有一个用户,它有100个账户. 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来? 在查询用户时,用户下 ...

  5. Mybatis关联查询(转载)

    原文地址: http://www.cnblogs.com/xiaolang8762400/p/7399892.html   mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映 ...

  6. App支付宝登录授权

    一.在支付宝开放平台申请App应用,并且配置后台信息 https://openhome.alipay.com/platform/appManage.htm#/apps 填写自己的申请信息 添加应用功能 ...

  7. 04 vue-cli 脚手架、webpack-simple模板项目生成、组件使用

    alice https://www.cnblogs.com/alice-bj/p/9317504.html https://www.cnblogs.com/alice-bj/p/9318069.htm ...

  8. USACO14MAR The Lazy Cow(Gold)

    题目 题意:平面上有 \(n\) 块草地,第 \(i\) 块草地坐标为 \((x_i,y_i)\) ,上面有 \(g_i\) 个单位的草.Bessie 可以吃到距离起始点不超过 \(k\)(这里是曼哈 ...

  9. Linux帮助文档

    Linux当中有许多命令: 在Linux中提供了详细的帮组文档,利用好可以提高使用效率:   1.help参数 大多数命令都可以使用 -h 或 --help 参数来获取该命令的使用方法.参数等信息: ...

  10. idea 2017 破解方法

    一.先进入Intellij IDEA的官网:https://www.jetbrains.com,下载安装 二.破解. 网上的破解方法较多,总结下来大概有下面几种办法供大家作为参考 声明:破解用于学习和 ...