Java applet:如何在页面刷新之前确保销毁完成
在Java util日志记录中,我在init()上启动处理程序,并在destroy()处关闭处理程序,它完全正常:创建了一个日志文件等.如果用户正常刷新页面,它仍然只创建一个日志文件. 但是,如果用户快速刷新applet的页面几次,看起来似乎没有调用destroy()或者没有完成任务,并且因为init()再次被调用,它会假定前一个文件仍然被锁定并创建一个新的日志文件. 我试图使用destroy()和finalize()来关闭处理程序,但它不起作用. 另一个小问题是:如果init()尚未完成并且页面被刷新,实际发生了什么.它是否会继续这个过程并最终导致调用destroy()或它是否只是停在那里? 最佳答案
引自Java Tutorials:
在多线程环境中,您应该非常小心共享资源.最好和最简单的方法是不分享任何东西(最好的扩展,没有死锁). 我假设,每次在“init”-method中初始化你的处理程序.如果是的话,您应该使用一个静态共享记录器(请参阅此link).它将有助于改善情况,但如果您使用applet启动多个浏览器 – 仍将创建新的日志文件. Oracle不建议使用此解决方法,并保留这种解决方法以实现向后兼容性. 推荐且易于实现的解决方案 – “每个applet都应该拥有自己的记录器并写入自己的文件”.日志文件名生成代码:
另外,Best Practices For Applet Development. 回答您的小问题(已更改): 根据java插件中对此old bug的讨论,applet可以随时以一些预定义的间隔终止进行清理.因此,您应该将资源清理代码放在“停止”或“销毁”方法中,但您不应该依赖该代码的执行.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |