java - 在 Java 控制台中检测 Ctrl+C

标签 java command-line-interface control-c

我有一个控制台 Java 游戏。如果按下 Ctrl+C,游戏得分将保存在 JSON 文件中。将分数保存在 JSON 文件中的过程有效。但我不知道如何从控制台检测 Ctrl+C ,如果发生这种情况,我将保存分数(只是一个方法调用)。 使用 KeyListener 时,它无法在控制台上运行(据我所知,仅适用于 JFrame)。

我在互联网上找不到问题的解决方案。

我必须使用运行时来完成此操作吗?我试过了,但是没用...

Runtime.getRuntime().addShutdownHook(new Thread()
{
    public void run()
    {
        Test.mainThread.interrupt();
    }
});

Stackoverflow上有类似的问题,但不能在控制台上使用Catching Ctrl+C in Java

最佳答案

添加关闭 Hook 是正确的方法,但 Test.mainThread.interrupt(); 可能行不通。 JVM 已经关闭。你的主线程不太可能有时间响应中断;一旦所有关闭 Hook 完成,Java 就会终止。

只需让您的关闭 Hook 显式执行您需要采取的任何操作:

Runtime.getRuntime().addShutdownHook(new Thread()
{
    @Override
    public void run()
    {
        try
        {
            Test.saveScore();
        }
        catch (IOException e)
        {
            System.err.println("Couldn't save score before terminating.");
            e.printStackTrace();
        }
    }
});

关于java - 在 Java 控制台中检测 Ctrl+C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61821299/

相关文章:

java - 访问Java中的私有(private)方法

java - Eclipse 类设计器和设计<--> java 源代码绑定(bind)

java - 有没有一种简单的方法来反转发生溢出的整数函数?

java - 有 jconsole 的 CLI 版本吗?

java - 如何从 mvn、gradle 等 Maven 项目构建 CLI?

Powershell AcceptTcpClient() 不能被 Ctrl-C 中断

java - 如何更新 Eclipse 状态行?

python - 使用 ^C/KeyboardInterrupt 在子线程中中断 Python raw_input()

Linux Bash 脚本 : Command Executed After Control-C

python - 更改 Python 交互提示 ">>>"