2

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

4

1 回答 1

5

UserInterruptException只会从其中一种ConsoleReader.readLine方法中抛出,并且只有当用户按下CTRL+ChandleUserInterrupt设置为 true(通过调用consoleReader.setHandleUserInterrupt(true))时才会抛出。

在 UNIX 平台上

只有当终端是(UNIX 平台的默认终端)ConsoleReader的实例时,它的方法才会在被调用时被调用。此方法通过对系统执行正确的命令(通过使用)来禁用+的默认行为(通常导致 JVM 退出)。在方法返回之前,它会调用终端的方法,这会启用+的默认行为。UnixTerminaldisableInterruptCharacterreadLineCTRLCsttyreadLineenableInterruptCharacterCTRLC

这意味着CTRL+的默认行为仅在方法执行C时才被禁用。readLine

于 2015-12-25T15:54:17.493 回答