输入下划线触发无效键码错误,转Kotlin后问题未解决求助
解决下划线输入触发IllegalArgumentException的问题
你在模拟键盘输入下划线时遇到的键码错误,不管是Java还是转成Kotlin版本都没解决,我来帮你梳理下问题根源和可行的解决方案:
问题根源
下划线_并不是通过单一按键就能输入的——在Windows系统上,它需要按下Shift + 减号(-)的组合键才能输出。而你的代码逻辑应该是尝试直接将字符映射为单个键码,找不到对应键码时就触发了default分支的异常:
default: throw new IllegalArgumentException("Cannot type character " + character);
Kotlin版本的逻辑也是同理,所以才会出现完全相同的错误提示。
解决方案
你需要在代码中为下划线单独添加组合键的处理逻辑,而不是去寻找不存在的“下划线专属键码”:
Java版本修改
在你的字符判断分支中加入:
case '_': robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_MINUS); robot.keyRelease(KeyEvent.VK_MINUS); robot.keyRelease(KeyEvent.VK_SHIFT); break;
Kotlin版本修改
对应的Kotlin分支代码:
'_' -> { robot.keyPress(KeyEvent.VK_SHIFT) robot.keyPress(KeyEvent.VK_MINUS) robot.keyRelease(KeyEvent.VK_MINUS) robot.keyRelease(KeyEvent.VK_SHIFT) }
额外建议
除了下划线,像@#$%^&*()这类特殊字符大多都需要Shift组合键输入,你可以按照同样的逻辑,把这些字符的组合键处理都补充到代码中,避免后续再出现类似的异常。另外,如果你的Robot类支持type(char c)方法,也可以直接调用这个方法,它会自动处理组合键的输入逻辑,兼容性更好。
内容的提问来源于stack exchange,提问作者SL5net




