以下是引用xslff在2007-6-16 23:05:01的发言:
Applet是一种特殊的Java程序,请查阅Applet生命周期相关资料,便可知道标准Applet程序最少有4个方法:
init()必须有 像桌面程序(Application)中的main()方法,Applet加载后直接运行此方法
start()可选 当你从其它网页返回到此Applet网页时运行此方法
stop()可选 当Applet所在的网页页面发生跳转时运行此方法
destroy()可选 像桌面程序(Application)中的exit()方法,当网页浏览器关闭或中止Applet时运行此方法
上述四个方法的作用纯属个人理解,如有偏差,还请以SUN的JDK(API文档)为准!
将楼主的程序按Applet要求修改如下:
import java.applet.*;
import java.awt.*;
public class gu extends Applet
{
int s=1;
public void init()
{
do
{
s=s*2;
repaint();
//Applet属于GUI程序,所以必须用paint方法在组件上面绘出内容,而不是用控制台的println()方法!
//调用repaint()方法等于间接调用paint()方法;
}
while(s<999999999);
}
public void paint(Graphics g)
{
g.drawString(String.valueOf(s),60,80);
}
}
因为Java的速度会很快,所以,这样的代码会直接让我们看到最后那个最大的结果,而看不到s动态变化的过程,对程序做小小的修改!
import java.applet.*;
import java.awt.*;
public class gu extends Applet implements Runnable
{
int s=1;
public void init()
{
new Thread(this).start();
}
public void run()
{
do
{
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
}
s=s*2;
repaint();
}
while(s<999999999);
}
public void paint(Graphics g)
{
g.drawString(String.valueOf(s),60,80);
}
}
这里,让类实现了Runnable接口,即创建了线程!
创建线程的原因是我们要创建动画,如果我们不创建线程,而是将do while循环放在类的某个方法当中,那么那个方法会一直占用CPU,其它方法无法运行,即无法更新绘制的图像!当循环结束,计算出s最大的值后,paint方法才有机会运行,仅将最后的s结果绘制出来!
我们创建线程后,将循环放入线程中,Applet类的paint方法(其实也是一个线程)会和循环一起工作,每当s的值更新后,paint方法就将更新的s的值绘制在Applet面板上,并覆盖掉原来绘制在Applet面板上面的内容!我们就看到了动态更新的动画(这个算是最最简单的动画了吧)!
如果仅仅是在状态栏显示,程序代码修改如下:
import java.applet.*;
public class gu extends Applet
{
int s=1;
public void init()
{
do
{
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
}
s=s*2;
showStatus(String.valueOf(s));
}
while(s<999999999);
}
}
好像在状态栏显示的那个程序不会无限循环啊.