【例20.4】让进度条A等待进度条B
在项目中创建JoinTest类,该类继承了JFrame类。该实例包括两个进度条,进度条的进度由线程来控制,通过使用join()方法使上面的进度条必须等待下面的进度条完成后,才可以继续。
/*【例20.4】让进度条A等待进度条B
* 在项目中创建JoinTest类,该类继承了JFrame类。该实例包括两个进度条,
* 进度条的进度由线程来控制,通过使用join()方法使上面的进度条必须等待下面
* 的进度条完成后,才可以继续。
* */
package dxc;
import java.awt.BorderLayout;
import javax.swing.*;
public class JoinTest extends JFrame{
private Thread threadA;
private Thread threadB;
private JProgressBar progressBarA = new JProgressBar();
private JProgressBar progressBarB = new JProgressBar();
public static void main(String[] args) {
// TODO Auto-generated method stub
JoinTest test = new JoinTest();
test.setVisible(true); // 设置窗体是否可见
}
public JoinTest() {
setBounds(200, 200, 200, 200); // 设置窗体左上角坐标和窗体宽和高
setDefaultCloseOperation(EXIT_ON_CLOSE); // 手动关闭窗体左上角的X号时,释放窗体资源并关闭程序。( (1)WindowContants.EXIT_ON_CLOSE;(2)JFrame.EXIT_ON_CLOSE;(3)EXIT_ON_CLOSE;)
setResizable(false); // 设置窗体的大小不可改变
getContentPane().add(progressBarA, BorderLayout.NORTH);
getContentPane().add(progressBarB, BorderLayout.SOUTH);
progressBarA.setStringPainted(true);
progressBarB.setStringPainted(true);
threadA = new Thread(new Runnable() {
int count = 0; // 进度条A上的数字
@Override
public void run() {
while(true) {
progressBarA.setValue(++count);
try {
Thread.sleep(100);
threadB.join();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
});
threadA.start();
threadB = new Thread(new Runnable() {
int count = 0; // 进度条上B的数字
@Override
public void run() {
while(true) {
progressBarB.setValue(++count);
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
if(count == 100) {
break;
}
}
}
});
threadB.start();
}
}