我很难理解CTRL+C在 jline2 中是如何处理的。我发现如果设置为trueconsoleReader.readline
会抛出异常。handleUserInterrupt
但是我想知道在抛出这个异常之前,CTRL+C是如何被捕获和解释的(而不是退出程序)?
问问题
697 次
1 回答
5
UserInterruptException
只会从其中一种ConsoleReader.readLine
方法中抛出,并且只有当用户按下CTRL+C并handleUserInterrupt
设置为 true(通过调用consoleReader.setHandleUserInterrupt(true)
)时才会抛出。
在 UNIX 平台上
只有当终端是(UNIX 平台的默认终端)ConsoleReader
的实例时,它的方法才会在被调用时被调用。此方法通过对系统执行正确的命令(通过使用)来禁用+的默认行为(通常导致 JVM 退出)。在方法返回之前,它会调用终端的方法,这会启用+的默认行为。UnixTerminal
disableInterruptCharacter
readLine
CTRLCstty
readLine
enableInterruptCharacter
CTRLC
这意味着CTRL+的默认行为仅在方法执行C时才被禁用。readLine
于 2015-12-25T15:54:17.493 回答