Java 关闭钩子

2023-12-26

我已将以下代码添加到我的程序中:

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("exit");
    }
}){});

但是我没有看到该消息。附加信息:我正在 Java 7 上的 Netbeans IDE 内部运行该程序。

编辑:我忘了补充一点,有一个全局线程可以使程序保持活动状态。我通过按 Netbeans 右下角的 [x] 将其关闭。


JVM 可以以有序或突然的方式关闭。关闭钩子运行用于有序关闭:当最后一个normal线程终止,有人调用System.exit或通过其他平台特定方式(例如键入 Ctrl-C)。

关闭挂钩不会因 JVM 突然关闭而运行。当您按下 Netbeans 右下角的 [x] 时,这将导致 JVM 突然关闭,这就是关闭挂钩未启动的原因。

例如 :

public class ShutdownHook {
public void attachShutDownHook() {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            System.out.println("exit");
        }
    });

}

public static void main(String[] args) {
    ShutdownHook sample = new ShutdownHook();
    sample.attachShutDownHook();
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

如果你运行上面的代码,并让程序正常完成,你会看到exit打印在控制台上。但是如果你按[x](3秒内)突然关闭它,关闭钩子将不会运行,并且不会有任何exit打印在控制台上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 关闭钩子 的相关文章

随机推荐

  • Apache Velocity:如何像 Java 中那样定义自定义方法?

    我目前在 Polarion 应用程序 ALM 软件中编写了一个 wiki 页面 这些页面上的语法包括 据我所知 HTML Javascript 和 Apache Velocity 所以我想在 Apache Velocity 中编写一个脚本
  • 如何使用Jest测试文件下载?

    我有一些代码如下 global document global window global Blob import FileSaver from file saver export const createDownloadFromBlob
  • 检测数字键盘是否存在?

    是否可以判断系统是否连接有数字键盘 台式机键盘通常有数字键盘 而笔记本电脑通常没有 尽管它们将数字键盘键放在普通键盘中 并通过 Num Lock 激活 操作系统是否知道小键盘按键是否在物理上是分开的 如果是这样 这些信息是否会以某种方式暴露
  • 通过 ODBC 连接检索的表情符号数据显示为问号

    我从经典 ASP 页面连接到 MySQL 版本 5 5 50 log MySQL数据库设置如下 数据库字符集 utf8mb4 数据库排序规则 utf8mb4 general ci 表和字段 字符集 utf8mb4 排序规则 utf8mb4
  • 更新 mnesia 架构的最简单方法是什么?

    例如 我保存了 id name 在 mnesia 并想要更新到 id name age 我需要打电话吗transform table每次我更改架构时 最简单的方法是删除该表并重新创建它 如果需要保留表中的数据 mnesia transfor
  • 来自字符串“Yellow”的 Java 颜色

    有什么方法可以从字符串中获取颜色 例如 白色 Color color Field field Class forName java awt Color getField Yellow color Color field get null I
  • 动态添加的表单字段在 form.cleaned_data 中被删除

    我在模板中放置了一些客户端 JavaScript 允许用户动态地将字段添加到表单中 我的问题是这些字段被清理了form cleaned data 所以我无法以这种方式访问 它们 所有字段都可以在request POST 所以我可以用它来解决
  • 算法 - 如何通过 2n/3 比较对 0/1 数组进行排序?

    In 算法设计手册 http www algorist com 有这样的消费税 4 26 考虑使用以下方法对 n 个 0 和 1 的序列进行排序的问题 比较 对于两个值 x 和 y 的每次比较 该算法 了解 x y 中哪一个成立 a 给出一
  • 行构造函数有什么用?

    在 PostgreSQL 中 什么是ROW 函数用于 具体有什么区别 SELECT ROW t f1 t f2 42 FROM t where f1属于类型int f2属于类型text and CREATE TYPE myrowtype A
  • 查询DB并返回Json格式结果的通用Java方法

    我正在寻找的东西对我来说似乎很简单 但我的护目镜失败了 我想要一个允许我运行任何查询并获取 json 格式结果的方法 诀窍是我don t希望结果需要 java 对象作为过程的一部分 DTO VO 等 有什么快速 简单 干净的方法可以做到这一
  • 如何在xsd文件中定义xml主键并在xml文件中验证

    建筑物 xsd
  • 在 Android 的警报管理器中使用 Intent Extras 传递值

    我想知道这段代码是否有效 我现在无法尝试 此外 我还有一些疑问需要澄清 Intent intent new Intent context AlarmReceiver class intent putExtra user global get
  • 如何从R中的数据帧创建不同格式的矩阵?

    我的数据框如下 group id user id 1000 26 1236 29 1236 46 3767 26 3767 46 5614 29 5614 45 5614 46 我需要输出如下 User 1 User 2 of common
  • 将图像从 3d 视角重绘为 2d

    我需要用 Pascal Delphi Lazarus 编写的逆透视变换 请参见下图 我想我需要遍历目标像素 然后计算源图像中的相应位置 以避免舍入误差等问题 function redraw 3d to 2d sourcebitmap tbi
  • WPF C# 按钮样式

    有人知道如何在 WPF 中重新创建此按钮样式吗 因为我不知道如何制作不同的隔间 以及两种不同的文本和文本样式 要解决你的问题肯定需要使用Style and Template为了Button 但他到底长什么样呢 决定可能有几个 例如 Butt
  • 在 SQLPlus 中设置查询输出的格式

    我目前正在使用 SQLPlus 每当我查询数据库时 结果都是一团糟 换句话说 它很难读 我想知道是否有人知道如何在 Unix 服务器上运行的 SQLPlus 中格式化查询的输出 列 表等 但是 我正在从 Windows 访问服务器 而且 谁
  • 使用 wicked_pdf gem 和 wkhtmltopdf 在 PDF 上显示图像标题

    我的控制器 def show respond to do format format pdf do render pdf gt show template gt welcome show footer gt right gt Page pa
  • 在迭代期间查找文件中的位置

    我正在尝试使用f tell 在迭代期间的普通文本文件中 with open test txt as f for line in f print f tell 我收到以下错误 Traceback most recent call last F
  • 删除工具栏和选项卡布局之间的空间间隙

    我在一个片段中有一个带有 TabLayout 的 AppBarLayout 该片段位于具有工具栏的 Activity 中 但是toolbar和TabLayout之间出现了一个空格 我不知道它来自哪里 片段包 xml
  • Java 关闭钩子

    我已将以下代码添加到我的程序中 Runtime getRuntime addShutdownHook new Thread new Runnable Override public void run System out println e