错误多多:
显示的是JFrame jfl, paint(g) 方法却是Demo定义的,当然什么都没有了。ja1=new JApplet();
jf1.getContentPane().add(ja1); //你要作什么???td=new Thread(this); // 这样才能使用你定义的Runnable.run()改进:
用ClockBoard类封装clock的运行和绘制。ClockBoard extends JPanel, 减少闪烁。
注意文件名应为:"Clock.java", 因为这里定义了main()
class ClockBoard extends JPanel implements Runnable{
private Date date1;
private int lastxs, lastys, lastxm,
                lastym, lastxh, lastyh;
private boolean timeToOut=false;
private Thread td;
public ClockBoard(){
td=new Thread(this);
}
public void start(){
td.start();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int xh, yh, xm, ym, xs, ys;
        int xcenter = 80, ycenter = 55;
        int h,m,s;
        
        //画圆
         g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
     g.drawString("9", xcenter-45, ycenter+3); 
         g.drawString("3", xcenter+40, ycenter+3);
         g.drawString("12", xcenter-5, ycenter-37);
         g.drawString("6", xcenter-3, ycenter+45);
         
         date1=new Date();
         h=date1.getHours();
         m=date1.getMinutes();
         s=date1.getSeconds();
         
         //确定针的位置
         xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
         ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
         xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
         ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
         xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                   + xcenter);
         yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                   + ycenter);
         
         //画针
          g.drawLine(xcenter, ycenter, xs, ys);
          g.drawLine(xcenter, ycenter-1, xm, ym);
          g.drawLine(xcenter-1, ycenter, xm, ym);
          g.drawLine(xcenter, ycenter-1, xh, yh);
          g.drawLine(xcenter-1, ycenter, xh, yh);
          
          g.drawString(date1.getHours()+":"+date1.getMinutes()+":"+date1.getSeconds(),180,10);
        }
public void run()
        {
         while(!timeToOut)
         {
         try { 
                      td.sleep(100);
                    } catch (InterruptedException e) {}           
repaint();
            }
        }
}
class Demo extends JApplet
{
private JFrame jf1;
private JApplet ja1;
private ClockBoard cb=null;
    
Demo()
{
jf1=new JFrame("CLOCK");
jf1.getContentPane().setLayout(new BorderLayout());
cb=new ClockBoard();
jf1.getContentPane().add(cb,BorderLayout.CENTER);
jf1.addWindowListener(new MyWindow());

jf1.setSize(300,200);
jf1.show();
}


        public void go()
        {
            cb.start();

        } 
        
        public void update(Graphics g)
         {
            paint(g);
         }
}//class clock ...
//class MyWindow...

解决方案 »

  1.   

    /**
    Application Mode: java Clock  
    Applet Mode:
     edit a file "Test.html":
    <Html>
    <applet code=Clock.class width=400 height=400>
    </applet>
    </html>Appletviewer Test.html
    */
    import java.util.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.applet.*;
    import java.awt.*;class ClockBoard extends JPanel implements Runnable{
    private Date date1;
    private int lastxs, lastys, lastxm,
                    lastym, lastxh, lastyh;
    private boolean timeToOut=false;
    private Thread td;
    public ClockBoard(){
    td=new Thread(this);
    }
    public void start(){
    td.start();
    }
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    int xh, yh, xm, ym, xs, ys;
            int xcenter = 80, ycenter = 55;
            int h,m,s;
            
            //画圆
             g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);
         g.drawString("9", xcenter-45, ycenter+3); 
             g.drawString("3", xcenter+40, ycenter+3);
             g.drawString("12", xcenter-5, ycenter-37);
             g.drawString("6", xcenter-3, ycenter+45);
             
             date1=new Date();
             h=date1.getHours();
             m=date1.getMinutes();
             s=date1.getSeconds();
             
             //确定针的位置
             xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
             ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
             xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
             ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
             xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                       + xcenter);
             yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30
                       + ycenter);
             
             //画针
              g.drawLine(xcenter, ycenter, xs, ys);
              g.drawLine(xcenter, ycenter-1, xm, ym);
              g.drawLine(xcenter-1, ycenter, xm, ym);
              g.drawLine(xcenter, ycenter-1, xh, yh);
              g.drawLine(xcenter-1, ycenter, xh, yh);
              
              g.drawString(date1.getHours()+":"+date1.getMinutes()+":"+date1.getSeconds(),180,10);
            }
    public void run()
            {
             while(!timeToOut)
             {
             try { 
                          td.sleep(100);
                        } catch (InterruptedException e) {}           
    repaint();
                }
            }
    }
    public class Clock extends JApplet
    {
    private JFrame jf1;
    private JApplet ja1;
    private ClockBoard cb=null;
        
    public Clock()
    {
    jf1=new JFrame("CLOCK");
    jf1.getContentPane().setLayout(new BorderLayout());
    cb=new ClockBoard();
    jf1.getContentPane().add(cb,BorderLayout.CENTER);
    jf1.addWindowListener(new MyWindow());

    jf1.setSize(300,200);
    jf1.show();
    }

    public void init(){
    //Clock ck=new Clock();
    cb.start(); }

            public void go()
            {
                cb.start();

            } 
            
            public void update(Graphics g)
             {
                paint(g);
             } public static void main(String args[])
    {
    Clock ck=new Clock();
    ck.go();
    }
    }
    class MyWindow extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
    {
    Frame f=(Frame)(e.getSource());
    f.dispose();
    }
    }
      

  2.   

    and you should use Calendar to get hour / minute / seconds
    Calendar c=Calendar.getInstance();
    c.get(Calendar.SECOND)
      

  3.   

    其他地方都不动,把头子改成:
    class Demo extends JFrame implements Runnable
    {
    private JFrame jf1;
    private JApplet ja1;
    private Date date1;
    private int lastxs, lastys, lastxm,lastym, lastxh, lastyh;
        private boolean timeToOut=false;
        Thread td;
    Demo()
    {
    this.setTitle("CLOCK");
    addWindowListener(new MyWindow());
    setVisible(true);
    setSize(200,200);
    //jf1.pack();
    }
    这个就行了,不过效果不太好。画的图也偏了。