实验十四 线程设计
1.源程序:
package shiyan14;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class ShiYan14 extends JFrame{/*** */
private static final long serialVersionUID = 1L;// 定义组件
private JLabel lblTime;
private JTextField txtInput;
private JButton btnEnter;// 构造方法
public ShiYan14(){// 设置窗体的相关属性
super("ShiYan14");
this.setSize(300,200);
this.setLayout(null);
this.setLocation(100,50);// 创建组件
this.lblTime = new JLabel("请输入倒计时时间");
this.lblTime.setBounds(30,20,200,30);
this.txtInput = new JTextField();
this.txtInput.setBounds(30,70,100,30);
this.btnEnter = new JButton("确定");
this.btnEnter.setBounds(150,70,70,30);// 给JTextField注册监听
this.txtInput.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent ke) {}
public void keyReleased(KeyEvent )
public void keyTyped(KeyEvent ke) {//
tInput_KeyTyped(ke);
}
});// 给JButton注册监听
this.btnEnter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnEnter_ActionPerformed(ae);}});// 将各组件添加到窗体上
add(lblTime);
add(txtInput);
add(btnEnter);// 显示窗体
this.setVisible(true);}// 输入时的事件处理,控制用户只能输入数字
public void txtInput_KeyTyped(KeyEvent ke){
if(ke.getKeyChar() < '0' || ke.getKeyChar() > '9'){
ke.setKeyChar('\0');
}
}// 点击按钮时的事件处理
public void btnEnter_ActionPerformed(ActionEvent ae){// 获得用户输入的倒计时时间String strTime = this.txtInput.getText();
if(strTime.equals("")){// 检测用户是否输入
this.lblTime.setText("您尚未输入,请输入!");}
else{Integer time = Integer.parseInt(strTime);// 创建线程
TimeThread tt = new TimeThread(this.lblTime,time);
tt.start();// 创建
TimerTimer timer = new Timer();
timer.schedule(new TimerTask(){// 启动其他程序
public void run() {System.out.print("ok");
}
}, time * 1000);
}
}// 启动窗体
public static void main(String[] args){
new ShiYan14();
}
}// 时间线程类
class TimeThread extends {
private JLabel lblTime;
private int time;// 构造方法传入,显示事件的JLabel和倒计时的时间。
public TimeThread(JLabel lblTime, int time){
this.lblTime = lblTime;this.time = time;
}// run方法
public void run(){
while(time > 0){// 显示所剩时间
this.lblTime.setText("所剩时间:" + time+"s");// 所剩时间减少
time--;
try {Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2.实验心得
本次实验对我来说难度较大,由于基础的一些知识没有熟练掌握,导致出现的问题较多,通过课本和一些搜索的知识解决了部分问题,但是大多难以理解。希望同学和老师能给予帮助。