题目:
多线程编程题目 2:编写一个图形界面程序,运行之后,让其中有一个线程能在界面上“实时” 显示系统当前时间(精确到秒获取时间可查询 java.util.Calendar 类,它包含了多个用于获得系统时间 的函数) 。另让一个线程可以在界面上提示当前系统时间下用户该做什么工作(例如当程序判断出系统时 间现在是 8:00 到 9:00,则提示用户该上课;现在是 23:00 到 8:00,则提示用户该休息。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Xiancheng_2 extends JFrame{
private JLabel lblTime = new JLabel();
private JLabel lblDo = new JLabel();
public Xiancheng_2(){
this.setLayout(new GridLayout(2, 1));
add(lblTime);
add(lblDo);
new TimeThread().start();
new DoThread().start();
}
private class TimeThread extends Thread{
public void run(){
while (true){
Calendar calendar = new GregorianCalendar();
lblTime.setFont(new Font("宋体",Font.PLAIN,23));
lblTime .setForeground(Color.blue);
lblTime.setText(String.format("现在是:%d年%02d月%02d日 %02d:%02d:%02d",
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DATE),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND)));
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private class DoThread extends Thread {
public void run(){
while (true) {
Calendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
lblDo.setForeground(Color.blue);
lblDo.setFont(new Font("宋体",Font.PLAIN,23));
if (8 <= hour && hour < 9){
lblDo.setText("消息:该上课了");
}
else if (23 <= hour || hour < 8){
lblDo.setText("消息:该休息了");
}
else{
lblDo.setText("消息:无");
}
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
public void run(){
JFrame frame = new Xiancheng_2();
frame.setSize(500, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}