Java applet:如何在页面刷新之前确保销毁完成

Java util日志记录中,我在init()上启动处理程序,并在destroy()处关闭处理程序,它完全正常:创建了一个日志文件等.如果用户正常刷新页面,它仍然只创建一个日志文件.

但是,如果用户快速刷新applet的页面几次,看起来似乎没有调用destroy()或者没有完成任务,并且因为init()再次被调用,它会假定前一个文件仍然被锁定并创建一个新的日志文件.

我试图使用destroy()和finalize()来关闭处理程序,但它不起作用.
任何人都知道如何解决这个问题?

一个小问题是:如果init()尚未完成并且页面被刷新,实际发生了什么.它是否会继续这个过程并最终导致调用destroy()或它是否只是停在那里?

最佳答案
引自Java Tutorials

The Java Plug-in software creates a worker thread for every Java
applet .

在多线程环境中,您应该非常小心共享资源.最好和最简单的方法是不分享任何东西(最好的扩展,没有死锁).

我假设,每次在“init”-method中初始化你的处理程序.如果是的话,您应该使用一个静态共享记录器(请参阅此link).它将有助于改善情况,但如果您使用applet启动多个浏览器 – 仍将创建新的日志文件. Oracle不建议使用此解决方法,并保留这种解决方法以实现向后兼容性.

推荐且易于实现的解决方案 – “每个applet都应该拥有自己的记录器并写入自己的文件”.日志文件生成代码

private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");

private String generateFileName() {
    return String.format("applets-log/%s-%s.log",dateFormat.format(new Date()),UUID.randomUUID());
}

另外,Best Practices For Applet Development.

回答您的小问题(已更改):

根据java插件中对此old bug的讨论,applet可以随时以一些预定义的间隔终止进行清理.因此,您应该将资源清理代码放在“停止”或“销毁”方法中,但您不应该依赖该代码的执行.

Applets lifecycle is controlled by browser and applets should not be
given capabilities to run when its hosting document is destroyed by
browser.

Since 6u10,both old plugin and new plugin enforce applet shutdown
after a fixed amount of time (1000ms in old plugin and 200ms in new
plugin) for applet to stop.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类