package com.Thread.work1;
import java.awt.BorderLayout;
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
public class ProgressTaskDemo extends JFrame{
/** 进度条 */
private JProgressBar progressBar = new JProgressBar();
/** 开始按钮 */
private JButton btnStart = new JButton("开启线程");
/** 暂停按钮 */
private JButton btnPause = new JButton("暂停线程");
/** 创建进度条多线程类 */
private ProgressBarTask progressBarTask = null;
/** 创建改变颜色多线程类 */
private ChangeColorTask changeColorTask = null;
public ProgressTaskDemo(){
setTitle("多线程进度条");
JPanel jPanel = new JPanel();
jPanel.add(btnStart);
jPanel.add(btnPause);
getContentPane().add(progressBar,BorderLayout.CENTER);
getContentPane().add(jPanel,BorderLayout.NORTH);
//进度条的百分比
progressBar.setStringPainted(true);
//设置进度条的颜色 默认蓝色
progressBar.setBackground(Color.blue);
//监听器
listener();
setVisible(true);
}
/**
* 监听器
*/
public void listener() {
btnStart.addActionListener(e->{
//每次点击开启线程按钮 都是创建一个新的线程,而不是真正的暂停。
progressBarTask = new ProgressBarTask(progressBar);
Thread thread1 = new Thread(progressBarTask);
thread1.start();
changeColorTask = new ChangeColorTask(progressBar);
Thread thread2 = new Thread(changeColorTask);
thread2.start();
});
//暂停按钮
btnPause.addActionListener(e->{
progressBarTask.stop();
changeColorTask.stop();
});
}
public static void main(String[] args) throws InvocationTargetException, InterruptedException {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
new ProgressTaskDemo();
}
});
}
}
class ProgressBarTask implements Runnable{
private JProgressBar jprogressBar;
/** 线程进行的标志 */
private boolean isRunning = true;
/**
* 线程停止
*/
public void stop() {
this.isRunning = false;
}
public ProgressBarTask(JProgressBar jprogressBar) {
this.jprogressBar = jprogressBar;
}
@Override
public void run() {
while(jprogressBar.getValue() <= 100 && isRunning) {
jprogressBar.setValue(jprogressBar.getValue() + 1);
try {
TimeUnit.MILLISECONDS.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 改变颜色
* @author TRz
* @date 2020年10月31日上午8:35:01
* @remarks TODO
*/
class ChangeColorTask implements Runnable{
private JProgressBar jprogressBar;
/** 线程进行的标志 */
private boolean ischanging = true;
private Color[] color = new Color[10];
public ChangeColorTask(JProgressBar jprogressBar) {
this.jprogressBar = jprogressBar;
color[0] = Color.red;
color[1] = Color.blue;
color[2] = Color.cyan;
color[3] = Color.darkGray;
color[4] = Color.gray;
color[5] = Color.green;
color[6] = Color.LIGHT_GRAY;
color[7] = Color.magenta;
color[8] = Color.orange;
color[9] = Color.pink;
}
public void stop() {
this.ischanging = false;
}
@Override
public void run() {
while(jprogressBar.getValue() < 100 && ischanging) {
//1 - 10之间的随机数
int key = (int)(Math.random() * 999) % 10;
jprogressBar.setBackground(color[key]);
try {
TimeUnit.MILLISECONDS.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}