当前位置: 首页 > 面试题库 >

如何捕获System.exit事件?

严兴言
2023-03-14
问题内容

我在Java中有一个应用程序,其中我尝试确保如果有人在代码中退出代码System.exit(),则应调用侦听器来执行某些操作,例如记录消息并释放资源…

我如何实施它,欢迎任何建议/方法。


问题答案:

Runtime.addShutdownHook方法可用于添加一个关闭钩子,该钩子基本上是未启动的Thread,该钩子在Java虚拟机关闭时执行。

但是,这是应该谨慎对待的领域,因为它是在JVM生命周期的非常敏感的时间执行的。从API规范中获取该Runtime.addShutdownHook方法:

关机挂钩在虚拟机的生命周期中的某个微妙时间运行,因此应进行防御性编码。尤其应将它们编写为线程安全的,并尽可能避免死锁。

无论如何,请务必仔细阅读一下关机挂钩的工作原理,因为如果没有做好充分的准备,就不应该使用它们。请务必仔细阅读该Runtime.addShutdownHook方法的API规范。

这是我在搜索有关此答案的信息时发现的几篇文章:

  • Shutdown Hooks-它显示了一个如何在关闭时添加关闭钩子以记录日志的小例子。

  • Shutdown Hooks API的设计-以问答形式解决关闭钩子的一些设计决策。



 类似资料:
  • 本文向大家介绍如何让事件先冒泡后捕获?相关面试题,主要包含被问及如何让事件先冒泡后捕获?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 在DOM标准事件模型中,是先捕获后冒泡。但是如果要实现先冒泡后捕获的效果,对于同一个事件,监听捕获和冒泡,分别对应相应的处理函数,监听到捕获事件,先暂缓执行,直到冒泡事件被捕获后再执行捕获之间。

  • 问题内容: 我正在使用一个称为类的类,该类可实现处理项目中的正常异常。 据我了解,此类无法捕获EDT异常,因此我尝试在该方法中使用此类来处理EDT异常: 但是直到现在,它仍无法正常工作。例如,在初始化JFrame时,我从构造器中的捆绑文件中加载其标签,如下所示: 我从捆绑文件中删除了密钥以测试异常处理程序,但是它没有用!异常通常打印在日志中。 我在这里做错什么了吗? 问题答案: EDT异常处理程序

  • 问题内容: 我想阻止标准上下文菜单,并手动处理右键单击事件。 怎么做? 问题答案: 使用事件。 这是一个例子: 并使用事件监听器: 不要忘记返回false,否则仍会弹出标准上下文菜单。 如果要使用编写的函数而不是,请记住在函数和属性中都返回false 。

  • 问题内容: 我在输入元素中使用了“ ng-model”,并用chrome inspector观察了该元素。但是输入元素的每个onxxx属性(包括onchange)都是空的。然后,AngularJS如何捕获用户输入触发的“ onchange”事件? 问题答案: 如果在Chrome的“事件监听器”标签中检查了标准文本输入元素(已附加ng- model),则会看到该元素具有两个事件监听器:和。 默认情况

  • 我想在单击JFrame标题栏的红色close按钮时调用一个方法。 我如何捕捉那个事件?

  • 我已经在tomcat 7.0.55中部署了一个应用程序进行测试。我想捕获“HeapDumpOnOutOfMemoryError”是否正在发生。以下是我的JVM参数。 JAVA_OPTS="-server-Xms512M-Xmx2048M-XX: PermSize=256m-XX: MaxPermSize=512m-XX: UseConcMarkSweepGC-XX: UseParNewGC-XX: