线程上有问题import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;//主类 
public class ClockTest 
{   
    public static void main(String[] args) 
    {
     Clockframe frame=new Clockframe();
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    }
}class Clockframe extends JFrame 
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400);

panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
}//时钟界面类
class Clockpanel extends JPanel implements Runnable
{
    public void paintComponent(Graphics g)
{
    super.paintComponents(g);
g2=(Graphics2D)g;
    Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
    g2.draw(circle);

//获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND);

//设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font); 
drawstring("1",Math.toRadians(90-360*1/12),0.44*r); 
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r);

//画时针
        double hourAngle=Math.toRadians(90-360*hour/12);
        drawHand(g2,hourAngle,0.2*r);
        
        //画分针
        g2.setColor(Color.blue);
        double minuteAngle=Math.toRadians(90-360*minute/60);
        drawHand(g2,minuteAngle,0.3*r);
        
        //画秒针
        g2.setColor(Color.red);
        double secendAngle=Math.toRadians(90-360*secend/60);
        drawHand(g2,secendAngle,0.4*r);
        //画出时间
        g2.drawString(hour+":"+minute+":"+secend,180,350); } 
    //画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
}

//画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
}

public void start()//用于启动的标准程序 

if (clockThread == null) //判断线程是否还未创建 
clockThread = new Thread(this);
clockThread.start();//启动线程 


public void run() //用于定义运行内容的标准程序 
{
  
while (true) 

try { 
clockThread.sleep(1000);//休眠1秒 
} catch (InterruptedException e){} //异常错误处理,防止出现中断错误
   repaint();//重绘组件 

}

    private Thread clockThread;
    private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}