当前页面: 开发资料首页 → J2SE 专题 → 关于线程的一个问题
关于线程的一个问题
摘要: 关于线程的一个问题
package mypack;
import java.awt.*;
import javax.swing.*;
import java.util.Date;
public class Clock extends JFrame
{
private Date d=new Date();
private Container con;
private JLabel jtime=null;
private Ctime go;
class Ctime extends Thread
{
public void run(){
try{
while(true){Thread.sleep(1000);
jtime.setText(-#34;-#34;+(d.getYear()+1900)+-#34;年-#34;+(d.getMonth()+1)+-#34;月-#34;+d.getDate()+-#34;日-#34;+d.getHours()+-#34;点-#34;+d.getMinutes()+-#34;分钟-#34;+d.getSeconds()+-#34;秒-#34;);
con.setLayout(new BorderLayout());
}
}catch(Exception e){}
}
}
Clock()
{
con=this.getContentPane();
jtime =new JLabel(-#34;0-#34;);
con.add(jtime);
this.setSize(200,100);
this.setVisible(true);
go = new Ctime();
}
public static void main(String[] str)
{
Clock ob = new Clock();
Clock.Ctime ob2 =ob.new Ctime();//用了一个内部类的调用
ob2.start();
}
}
为什么我运行后时间是不动的啊?谁能指教我一下啊,我学java没久,对线程的理解还不是很明白
这是修改后的代码,自己看看
package mypack;
import java.awt.*;
import javax.swing.*;
import java.util.Date;
public class Clock extends JFrame
{
private Date d;
private Container con;
private JLabel jtime=null;
// private Ctime go;
class Ctime extends Thread
{
public void run(){
while(true)
{
d=new Date();
String str=-#34;-#34;+(d.getYear()+1900)+-#34;年-#34;+(d.getMonth()+1)+-#34;月-#34;+d.getDate()+-#34;日-#34;+d.getHours()+-#34;点-#34;+d.getMinutes()+-#34;分钟-#34;+d.getSeconds()+-#34;秒-#34;;
jtime.setText(str);
try{
Thread.sleep(1000);
}
catch(Exception e){}
}
}
}
Clock()
{
con=this.getContentPane();
con.setLayout(new BorderLayout());
jtime =new JLabel(-#34;0-#34;);
con.add(jtime);
this.setSize(200,100);
this.setVisible(true);
//go = new Ctime();
}
public static void main(String[] str)
{
Clock ob = new Clock();
Clock.Ctime ob2 =ob.new Ctime();//用了一个内部类的调用
ob2.start();
}
}
}catch(Exception e){}
得到一个时间对象一定要记得在Run方法里获得,否则你得到是一个死的对象,无法改变
你所做的是每一秒获得一次时间变化,启动线程后,就需要new 一个时间对象出来