实验十四:线程设计
一、源代码
package TestCountDown;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CountDown extends JFrame {
JButton jButton;
JLabel jLabel;
int time=60;
public CountDown() {
FlowLayout fl=new FlowLayout(FlowLayout.CENTER);
this.setLayout(fl);
//为按钮jButton添加监听器,实现点击时倒计时重新开始
jButton=new JButton("重新开始");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();//关闭当前窗口
new CountDown();//新建一个窗口
}
});
//匿名创建一个线程内部类来实现时间倒计时,这是整篇代码的核心
jLabel=new JLabel();
new Thread(){
public void run() {
while(time>0) {
time--;
if(time<6) {//当时间只剩5秒时闪红
jLabel.setForeground(Color.RED);
}
jLabel.setText(time+"秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
this.add(jButton);
this.add(jLabel);
this.setTitle("倒计时");
this.setSize(300, 200);
this.setResizable(true);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new CountDown();
}
}
二、结果
三、心得
1、使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。
2、Java中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。
3、一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。
4、
扩展java.lang.Thread类。
此类中有个run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的Runnable运行对象构造的,则调用该Runnable对象的run方法;否则,该方法不执行任何操作并返回。