我无法理解Java中的这个Applet和Thread代码

时间:2016-01-15 17:22:17

标签: java multithreading applet

所以我正在学习Java applet,并且这个代码涉及一个Applet和一个Thread,以便让applet使用repaint()方法滚动一个消息字符串。

import java.awt.*;
import java.applet.*;

/*
<applet code="Banner" width=300 height=50>
</applet>
*/

public class Banner extends Applet implements Runnable
{
    String msg = " Java Rules the Web ";
    Thread t;
    boolean stopFlag;

    public void init()
    {
        t = null;
    }

    public void start()
    {
        t = new Thread(this);
        stopFlag = false;
        t.start();
    }

    public void run()
    {
        for(;;)
        {
            try
            {
                repaint();
                Thread.sleep(250);
                if(stopFlag)
                    break;
            }
            catch(InterruptedException exc)
            {

            }
        }
    }

    public void stop()
    {
        stopFlag = true;
        t = null;
    }

    public void paint(Graphics g)
    {
char ch;
    ch = msg.charAt(0);
        msg = msg.substring(1, msg.length());
        msg += ch;
        g.drawString(msg,50,30);
    }
}

所以问题是我不明白为什么init初始化Thread为null,何时调用start方法以及何时调用init方法,何时调用stop方法以便将stopFlag设置为false以及如何最后一部分使String滚动:

public void paint(Graphics g)
    {
char ch;
    ch = msg.charAt(0);
        msg = msg.substring(1, msg.length());
        msg += ch;
        g.drawString(msg,50,30);
    }
}

由于

1 个答案:

答案 0 :(得分:0)

applet容器在创建applet时调用init,在applet可见时启动,在applet消失时停止(就像你离开托管applet的页面一样)。在init方法中将t字段设置为null并不做任何事情,因为无论如何在创建对象时它将为null。通过从字符串的开头取一个字符并将其放在字符串的末尾,然后在applet窗口中重新显示字符串来滚动消息。线程每250毫秒执行一次,直到applet停止。

小程序是一种死技术。