jline2 中 CTRL+C 是如何处理的

pyt*_*lus 2 java unix jline sigint shutdown-hook

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

Ron*_*n C 5

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

在 UNIX 平台上

只有当 的终端ConsoleReaderUnixTerminal(UNIX 平台的默认终端)的一个实例时,它的disableInterruptCharacter方法才会在readLine被调用时被调用。此方法通过对系统执行适当的命令(使用)来禁用CTRL+的默认行为C(通常会导致 JVM 退出stty)。在readLine方法返回之前,它会调用enableInterruptCharacter终端的方法,从而启用CTRL+的默认行为C

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