如何在jline2中处理CTRL + C.

时间:2015-11-18 23:53:12

标签: java unix sigint shutdown-hook jline

我很难理解如何在jline2中处理 CTRL + C 。我在consoleReader.readline中发现,如果handleUserInterrupt设置为true,则会抛出异常。但是我想知道在抛出这个异常之前, CTRL + C 是如何被捕获和解释的(而不是退出程序)?

1 个答案:

答案 0 :(得分:4)

UserInterruptException仅从ConsoleReader.readLine方法中抛出,并且只有当用户按下 CTRL + C 和{{1}时}设置为true(通过调用handleUserInterrupt)。

在UNIX平台上

仅当consoleReader.setHandleUserInterrupt(true)的终端是ConsoleReader(UNIX平台的默认终端)的实例时,才会在UnixTerminal时调用它的disableInterruptCharacter方法。 } 叫做。此方法通过对系统执行适当的命令(使用readLine)来禁用 CTRL + C 的默认行为(通常会导致JVM退出)。在stty方法返回之前,它调用终端的readLine方法,该方法启用 CTRL + C 的默认行为。

这意味着只有在执行enableInterruptCharacter方法时才会禁用 CTRL + C 的默认行为。