【问题标题】:I cant understand this Applet and Thread code in Java我无法理解 Java 中的这个 Applet 和 Thread 代码
【发布时间】:2016-01-16 01:36:43
【问题描述】:

所以我目前正在学习 Java 小程序,并拥有涉及 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将线程初始化为null,何时调用start方法以及何时调用init方法,何时调用stop方法以将stopFlag设置为false以及如何最后一部分使字符串滚动:

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 t 设置为 null。从首次加载小程序类或调用 stop() 时起,t 就已经为空。

标签: java multithreading applet


【解决方案1】:

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

小程序是一种死技术。

【讨论】:

  • 附录:小程序容器在很长一段时间内,当一个小程序变得可见时,会快速连续调用init()start(),当它不可见时,快速连续调用stop()destroy()更长可见。道德:你实际上不能依赖这四种方法的时间,它们取决于容器。
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2021-10-19
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多