问题遇到的现象和发生背景
我想在一个jframe里添加一个标签,用来显示当前的系统时间,包括一个整点报时的功能,但是在时间框框里一直都没有显示时间。
运行结果及报错内容
时间框里一直没有显示时间,
我的解答思路和尝试过的方法
我在thread类里边又增加了一个变量flag用来存储系统时间,然后把flag传给容器里的标签settext,进行repaint后并没有成功
我想要达到的结果
我想要在显示时间的框里可以吧当前系统的时间动态显示出来。期待大家的指点。
package 秒表案例;
import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Font;
import javax.swing.JLabel;
public class EX extends JFrame {
static JPanel contentPane;
public static void main(String[] args) {
EX a=new EX();
a.setVisible(true);
//thread thread =new thread();
//Thread t=new Thread(thread,"线程一");
//t.start();
while(true) {
//判断是否是整点
Date n=new Date();
SimpleDateFormat sbf1=new SimpleDateFormat("mm");
String time=sbf1.format(n);
if(!time.equals("00")) {
EX2 d=new EX2();
d.setVisible(true);
try {
Thread.sleep(3000);
d.dispose();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//主线程休眠一秒
Thread a1=new Thread();
try {
a1.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* Create the frame.
*/
public EX() {
setTitle("时间");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 386, 177);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
thread thread =new thread();
Thread t=new Thread(thread,"线程一");
t.start();
JLabel lblNewLabel = new JLabel(thread.flag);
EX.contentPane.repaint();
lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 40));
lblNewLabel.setBounds(0, 0, 362, 130);
contentPane.add(lblNewLabel);
}
}
class thread implements Runnable{
static String flag=null;
public void run() {
while(true) {
//获取当前的系统时间
Date d=new Date();
SimpleDateFormat sbf=new SimpleDateFormat("hh:mm:ss");
flag=sbf.format(d);
//System.out.println(flag);
System.out.println(sbf.format(d));
EX.contentPane.getComponent(0).setName(flag);
System.out.println(EX.contentPane.getComponent(0).getName());
EX.contentPane.validate();
EX.contentPane.repaint();
//线程休眠一秒
Thread m=new Thread();
try {
m.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package 秒表案例;
import java.awt.BorderLayout;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
public class EX2 extends JFrame {
private JPanel contentPane;
public EX2() {
setBounds(100, 100, 389, 196);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(null);
Date d=new Date();
SimpleDateFormat sbf=new SimpleDateFormat("hh");
//System.out.println(sbf.format(d));
JLabel lblNewLabel = new JLabel("现在是"+sbf.format(d)+"点整");
lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 40));
lblNewLabel.setBounds(10, 10, 345, 129);
panel.add(lblNewLabel);
}
}