我很难理解如何在jline2中处理 CTRL + C 。我在consoleReader.readline
中发现,如果handleUserInterrupt
设置为true,则会抛出异常。但是我想知道在抛出这个异常之前, CTRL + C 是如何被捕获和解释的(而不是退出程序)?
答案 0 :(得分:4)
UserInterruptException
仅从ConsoleReader.readLine
方法中抛出,并且只有当用户按下 CTRL + C 和{{1}时}设置为true(通过调用handleUserInterrupt
)。
仅当consoleReader.setHandleUserInterrupt(true)
的终端是ConsoleReader
(UNIX平台的默认终端)的实例时,才会在UnixTerminal
时调用它的disableInterruptCharacter
方法。 } 叫做。此方法通过对系统执行适当的命令(使用readLine
)来禁用 CTRL + C 的默认行为(通常会导致JVM退出)。在stty
方法返回之前,它调用终端的readLine
方法,该方法启用 CTRL + C 的默认行为。
这意味着只有在执行enableInterruptCharacter
方法时才会禁用 CTRL + C 的默认行为。