优雅地关闭 Java 命令行程序的最佳方法

2024-01-03

我对优雅地关闭 Java 命令行程序的不同方法感兴趣。发送终止信号不是一种选择。

我可以想到几种不同的方法。

  1. 打开端口并等待连接。完成后,优雅地关闭。
  2. 观察要创建的文件,然后关闭。
  3. 从终端读取一些输入,例如“执行关闭”。

第三种方法并不理想,因为经常有程序输出被输出到屏幕上。第一个需要太多努力(我很懒)。大多数程序员都使用第二个选项吗?如果不是,还有什么可能/优雅/简单?


你可以尝试这样的事情:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

edit:

shutdown hook 不会执行应用程序的关闭。相反,它为开发人员提供了一种在关闭时执行他/她希望的任何清理的方法。

来自 JavaDocRuntime http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)(如果您打算使用此方法,请仔细阅读):

关闭钩子只是一个已初始化但未启动的线程。当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行。当所有挂钩完成后,如果启用了退出时终结,它将运行所有未调用的终结器。最后,虚拟机将停止。 ...

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

优雅地关闭 Java 命令行程序的最佳方法 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • ng-content 选择绑定变量

    我正在尝试使用 Angular 2 创建一个表单生成器 一个非常基本的示例如下 this fields name Name type text name Age type number 但我也想支持自定义元素 例如 this fields
  • ResourceDictionary 源绑定到模块(用于本地化)

    我有一个 XAML 窗口 其中有一组绑定到对象的字符串 如下所示
  • Sonarqube:查看涵盖源代码的单元测试

    我们在 Bamboo 中有一个 CI 设置 它运行 Junit 测试并使用 Jacoco 计算单元测试覆盖率 然后我们运行Sonar插件进行源代码分析 一切都运行良好 我们可以看到 SonarCube 服务器上的分析 包括覆盖范围 但我们希
  • Symfony 框架的最佳论坛插件解决方案是什么?

    我正在寻找一个好的解决方案整合论坛进入 symfony 应用程序 像 phpBB 这样的东西会很棒 我见过 phpBB 插件与 symfony 集成 但这不足以满足我的目的 而且 在我看来 映射数据库表是一种蹩脚的方法 如果有人知道 Sym
  • 如何在微服务/容器/云环境中管理机密?

    微服务和云是一回事 每个人都在谈论和写作 就我个人而言 我对这个主题思考了很多 如何利用它从中受益 可能面临哪些挑战 这如何加速日常开发 以及如何管理一切 几天来困扰我的一个问题是 如何在微服务 云环境中管理机密 想象一下一家拥有 150
  • 如何在 Chrome 上下载文件而不自动将文件重命名为“下载”?

    我使用 javascript 生成文件并下载它 看来 根据 chrome 版本的不同 下载文件名可以自动重命名为 download 有办法避免吗 这是我的代码 var link document createElement a link s
  • UISearchBar 使用 Storyboard 实现

    我对 iOS 开发非常陌生 但也很兴奋 我构建了一个应用程序 它使用故事板并使用 plist 文件的内容填充 UITableView 到目前为止 我设法让一切运行良好 但现在我想添加一个搜索栏 就像联系人应用程序中的搜索栏一样 本质上这就是
  • 如何访问Singleton类的静态方法?

    我对单例类有一些困惑 以下是我的一些观点 单例类可以有静态方法吗 如果是的话我们如何调用该方法 静态类和单例类之间的主要区别是什么 我创建了我的单例类 如下所示 public class Singleton private static S
  • 如何修复 RedBlackTree 实现中的删除问题?

    这是我正在使用的 RedBlackTree 的实现 来自 Mark Allen Weiss 数据结构 public class RedBlackTree
  • SequenceStyleGenerator,如何使用前缀而不是后缀

    我正在休眠中处理序列 我们有一个关于序列命名的命名约束 格式为 SEQ 我如何自定义 参数化类 SequenceStyleGenerator 以便在序列名称中添加前缀 最后 我创建了一个继承自 SequenceStyleGenerator
  • 如何将 PathCchCanonicalizeEx 与 C++Builder 10.2 一起使用?

    我有一个使用旧版 32 位 C 编译器的旧版 Windows 项目 由于各种原因我需要使用Windows 8 功能PathCchCanonicalizeEx https stackoverflow com questions 7103864
  • Grails 2.1.0 不自动重新加载/自动重新编译

    看来 Grails 确实会自动重新编译我的 GSP 页面 但不会自动重新编译我的控制器 它曾经与以前版本的 Grails 一起使用 知道我可以寻找什么吗 在 OSX Snow Leopard 上使用 Grails 2 1 0 注意 这类似于
  • 快速半正弦近似(Python/Pandas)

    Pandas 数据框中的每一行包含 2 个点的纬度 经度坐标 使用下面的 Python 代码 计算许多 数百万 行的这 2 个点之间的距离需要很长时间 考虑到这两个点相距不到 50 英里 并且精度不是很重要 是否可以使计算速度更快 from
  • 使用“init”或“didmove”的正确方法是什么?

    语言 Swift 3 0 IDE Xcode 8 0 beta 2 项目 iOS 游戏 SpriteKit 我为 iOS 创建了一款游戏 我知道 Apple 对于接受应用程序 游戏的规则非常严格 所以我想知道哪种是设置游戏的正确方法 我从谷
  • 在共享开发环境中覆盖 PHP.ini

    我的开发环境与我的初创公司的其他开发人员共享 并在 Rackspace 上设置 php ini 文件位于 etc 文件夹 我相信这是一个集中位置 每个其他开发人员的开发环境设置都从这里进行配置 我想定制这个php ini专门为我自己归档 而
  • 在 Asp.net Core 1.0 项目的编译时复制文件

    我正在使用 Asp Net Core 1 0 创建 REST Api 我想在编译项目时将项目中未包含的文件复制到输出路径 但我不知道该怎么做 我尝试使用 buildOptions copyToOutput 但没有成功 我无法真正理解此处找到
  • Node.js 的 EJS(与 Express 捆绑)中未包含 link_to 和其他视图助手?

    我已经使用 Express Web 框架和 EJS 模板引擎设置了一个 NodeJS 服务器 当我尝试使用 EJS 时link to在视图内查看助手时 我收到引用错误 这是因为我做错了什么 还是视图助手只是不包括在内 我尝试过以下方法 lt
  • 在 Blazor 中,如何动态更改 HTML 标签?

    假设我的 Blazor 组件中有以下标记 div ChildContent div 我想为父组件提供一种方法来确定将使用哪个标签来代替 div 就像是 lt Tag attributes Attributes data myattr som
  • QMessageBox 阻止 QDialog

    这次我真的不知道如何提出我的问题 我的应用程序以 QDialog 作为主窗口 该应用程序从远程机器获取不同的值 例如温度 湿度等 为了进行开发 我添加了一个包含不同小部件的组框来模拟这些值 我对向用户发出警告和警报有不同的限制 例如 如果温
  • 优雅地关闭 Java 命令行程序的最佳方法

    我对优雅地关闭 Java 命令行程序的不同方法感兴趣 发送终止信号不是一种选择 我可以想到几种不同的方法 打开端口并等待连接 完成后 优雅地关闭 观察要创建的文件 然后关闭 从终端读取一些输入 例如 执行关闭 第三种方法并不理想 因为经常有