【问题标题】:Confirm before exiting Java program running in CMD退出在 CMD 中运行的 Java 程序前确认
【发布时间】:2014-09-09 06:10:01
【问题描述】:

我有一个 JAVA 程序,它在命令提示符打开的情况下连续运行。 现在,如果用户尝试通过按 CTRL + C 或单击关闭按钮退出程序,如果他真的想关闭,我想显示确认。

编辑: 如果无法使用 Java 或批处理,还有其他不使用它们的方法吗?

【问题讨论】:

  • 这个链接只捕获 ctrl + c 我需要处理,即使用户点击关闭按钮。
  • 无法处理。您必须编写自己的终端,例如在 Swing 中并检查关闭操作。
  • 这是一个控制台应用程序。通过 CMD 实现它的任何方式。我使用批处理文件启动程序。我可以添加一些东西吗?
  • 您可以在 SuperUser Disable close button on DOS program in Windows 7 上查看此帖子。我找不到来源,也没有自己测试,但答案被接受了......

标签: java cmd console-application


【解决方案1】:

这样应该可以拦截信号

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

更多信息在这里: How can I "intercept" Ctrl+C in a CLI application?

【讨论】:

  • 我尝试使用 sutdownhooks。但是如果用户点击关闭按钮,它们就不会运行。
【解决方案2】:

作为对 Prashant 回答和 Disable close button on DOS program in Windows 7 的补充,我在 CodeProject Disable System Close Button on a Console Application 上发现了一些有趣的元素。

如果你可以编译它(到处都有免费的 C++ 编译器),这里有一段 C-C++ 代码,你可以在你的 java 程序之前将它包含在你的批处理中,以禁用命令窗口的关闭按钮(这个有来源并经过测试...):

#include "windows.h"

int main(int argc, const char *argv[]) {
    HWND hWnd = ::GetConsoleWindow();
    if (hWnd != NULL) {
        HMENU hMenu = ::GetSystemMenu(hWnd, FALSE);
        if (hMenu != NULL) {
            ::DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);
        }
    }
    return 0;
}

但请注意,当关闭按钮消失时,您必须明确退出 cmd ...

【讨论】:

    猜你喜欢
    • 2014-02-15
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多