代码之家  ›  专栏  ›  技术社区  ›  Alohci

为什么Firefox会在20秒后终止我的小程序?

  •  3
  • Alohci  · 技术社区  · 14 年前

    我在这样的网页上有一个简单的小程序。(这是一个从更复杂的applet中删减下来的测试用例)。

    package test;
    
    import java.applet.Applet;
    
    @SuppressWarnings("serial")
    public class SimpleLoopApplet extends Applet
    {
        public void init()
        {
            System.out.println("SimpleLoopApplet invoked");
            try
            {
                while (true)
                {
                    try
                    {
                        System.out.println("Sleep for 1 second");
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e)
                    {
                        System.out.println("Applet thread interrupted while sleeping");
                    }
                }
            }
            finally {}
        }
    }
    

    在Firefox 3.6.8的一台计算机上,这个小程序将运行20秒,然后突然退出,就好像虚拟机正在终止一样(java控制台将消失;java图标将保留在系统托盘中,直到我将鼠标移到它上面;永远不会到达finally块)。

    在同一台计算机上的IE和Chrome中,循环将无限期地继续,就像在另一台计算机上的Firefox 3.6.8中一样。

    有人能提出小程序为什么会以这种方式终止吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Community Egal    4 年前

    从小程序 tutorial

    初始化方法

    init方法对于一次性 很长。init方法通常 包含您需要的代码 通常放入构造函数中。这个 小程序通常没有 保持init方法简短,以便 小程序可以快速加载。

    之后执行任务的每个小程序 对用户操作的响应)必须 重写start方法。开始 方法开始执行 小程序。回来是个好习惯 需要进行计算 可能是密集行动 最好开始一个新的线程

    看起来您必须为长时间运行的方法创建自己的线程。

        2
  •  1
  •   stacker    14 年前
    Can anyone suggest why the applet might terminate in this way?
    

    Javadoc init()

    如果该方法具有初始化 表演。例如,小程序 与线程一起使用init方法 杀死他们的方法。

    我想您需要一个长时间运行的初始化,因此应该在init()方法中为此启动一个线程。

        3
  •  1
  •   wylix    13 年前

    上有虫子 firefox .

    我找到的唯一解决方案是使用低于1.6u21的java。从1.6u21开始,firefox3.0和3.6被打破了。幸运的是,所有的东西都应该在Firefox4中工作。