初学者在学Applet时自己做了个显示时间的东东,动态取时间正常,可是不知为什么不能动态显示,只有applet窗口最大化、最小化或者通过拖拽边框时才会变化,用的是Eclipse运行。import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.applet.Applet;
import java.io.Console;
import java.util.Calendar;
import java.io.*;
import javax.swing.JLabel;class Timer implements Runnable
{
String zw[]={"年","月","日",":"};
StringBuffer dstr=new StringBuffer(); 
int y,mon,d,h,min,s;
public void getTime()

Calendar c1=Calendar.getInstance();
        y=(c1.get(Calendar.YEAR));
mon=(c1.get(Calendar.MONTH)+1);
d=(c1.get(Calendar.DAY_OF_MONTH));
h=(c1.get(Calendar.HOUR_OF_DAY));
min=(c1.get(Calendar.MINUTE));
        s=(c1.get(Calendar.SECOND));
    }
 public String toString(StringBuffer strBf)
 {
 return "当前时间是:"+dstr;
 }
public void run()
{
try 
        {
     Thread.sleep(1000);

    catch (InterruptedException e)
        {
e.printStackTrace();
}
         System.gc();
}}
public class HelloDemo extends Applet {
Timer t=new Timer();
public void paint(Graphics g)
{
  t.getTime();
  g.setColor(Color.RED);
      g.setColor(Color.ORANGE);
      g.setFont(new Font("Curier",20,20));
  g.drawString("当前日期是:"+t.y+"年"+t.mon+"月"+t.d+"日",0,30);
  g.setColor(Color.ORANGE);
      g.setFont(new Font("Curier",20,20));
  g.drawString("时间是:"+t.h+"时"+t.min+"分"+t.s+"秒",0,50);
}
       public void init()
       {
        this.setBackground(Color.BLACK); }
       public void start()
       {
        repaint();
        new Thread(t).start();
       
     }
     
}

解决方案 »

  1.   

    在 paint 里面加  repaint()就可以了
      

  2.   

    我试了把sleep放到paint中的repaint前刷新正常了。就是搞不明白这种嵌套使用repaint的原理是什么
      

  3.   

    你定义了Timer,但没有用,将它用上,在Timer的事件响应方法中调用repaint()
      

  4.   

      不是很明白,Timer我用了啊
      t.getTime();
      new Thread(t).start();
      

  5.   

    不好意思啊,没看见你用它来得到时间
    可以用Timer来设置 延迟时间,如300ms,这样每300ms就去执行相应的方法,在该方法中调用repaint来显示新的时间,避免循环调用,频繁 repaint
    另外,时间的获得可以用 Date 类或 swing中的Calendar
      

  6.   

    按照楼主的代码进行了修改,最终代码如下(仅供参考):import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.applet.Applet;
    import java.io.Console;
    import java.util.Calendar;
    import java.io.*;
    import javax.swing.JLabel;class Timer /*implements Runnable*/
    {
    String      zw[] = { "年", "月", "日", ":" };
    StringBuffer dstr = new StringBuffer();
    int          y, mon, d, h, min, s; public void getTime()
    {
    Calendar c1 = Calendar.getInstance();
    y = (c1.get(Calendar.YEAR));
    mon = (c1.get(Calendar.MONTH) + 1);
    d = (c1.get(Calendar.DAY_OF_MONTH));
    h = (c1.get(Calendar.HOUR_OF_DAY));
    min = (c1.get(Calendar.MINUTE));
    s = (c1.get(Calendar.SECOND));
    } public String toString(StringBuffer strBf)
    {
    return "当前时间是:" + dstr;
    }/* public void run()
    {
    try
    {
    Thread.sleep(1000);
    } catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    System.gc();
    }*/}public class HelloDemo extends Applet
    {
    private Timer t  = new Timer();
    // Thread  tt = new Thread(t);
    private int  = 1;

    public void paint(Graphics g)
    {
    t.getTime();
    setSize(700, 500);
    g.setColor(Color.RED);
    g.setColor(Color.ORANGE);
    g.setFont(new Font("Curier", 20, 20));
    g.drawString("当前日期是:" + t.y + "年" + t.mon + "月" + t.d + "日", 0, 30);
    g.setColor(Color.ORANGE);
    g.setFont(new Font("Curier", 20, 20));
    g.drawString("时间是:" + t.h + "时" + t.min + "分" + t.s + "秒", 0, 50);

    if( > 1)
    {
    try
            {
            Thread.sleep(1000);
            } catch (InterruptedException e)
            {
            e.printStackTrace();
            }
            repaint();
    }
    ++; } public void init()
    {
    this.setBackground(Color.BLACK);
    } public void start()
    {
    repaint();
    }}