初学者在学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();
}
}
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();
}
}
t.getTime();
new Thread(t).start();
可以用Timer来设置 延迟时间,如300ms,这样每300ms就去执行相应的方法,在该方法中调用repaint来显示新的时间,避免循环调用,频繁 repaint
另外,时间的获得可以用 Date 类或 swing中的Calendar
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();
}}