当前位置: 首页 > 面试题库 >

为什么某些KeyEvent键码会抛出“ IllegalArgumentException:无效键码”?

鲜于仰岳
2023-03-14
问题内容

我正在尝试使用来自动化一些过程Robot,似乎某些键码(仅在正常键入时要求您按住shift的符号)KeyEvent会抛出IllegalArgumentException。这是所有正在运行的代码main

Robot r = new Robot();
r.keyPress(KeyEvent.VK_EXCLAMATION_MARK);

但是,使用以下解决方法可以正常工作:

Robot r = new Robot();
r.keyPress(KeyEvent.VK_SHIFT);
r.keyPress(KeyEvent.VK_1);

有什么想法为什么会抛出异常?谢谢!

Java版本:1.6.0_23


问题答案:

因为就像文档中Robot.keyPress所说的那样,IllegalArgumentExceptionkeycode代表无效密钥且VK_EXCLAMATION_MARK不是有效密钥时,会引发an

键盘代码用于表示两件事:键盘上的键和“键入字符”事件。键入一个字符通常需要一个以上的按键(依次,同时或两者)。但是Robot.keyPress模拟的是按键(因此而得名)的行为,而不是键入字符的行为。

有关更多信息,请参见KeyEvent的文档:http
:
//download.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html



 类似资料:
  • 问题内容: 我担心这是运行时异常,因此应谨慎使用。 标准用例: 但这似乎会强制执行以下设计: 使它回到被检查的异常。 好的,但是让我们开始吧。如果输入错误,则会出现运行时错误。首先,这实际上是统一实施的相当困难的策略,因为您可能必须执行相反的转换: 更糟的是-虽然可以预期客户端代码将以静态方式进行检查,但对于更高级的数据(例如电子邮件地址)却并非如此,或更糟糕的是,必须对数据库进行检查,因此,一般

  • 我担心这是一个运行时异常,所以应该谨慎使用。 标准用例: 但这似乎会迫使以下设计: 将其恢复为检查异常。 好吧,但我们还是继续吧。如果输入错误,则会出现运行时错误。因此,首先,这实际上是一个很难统一实施的政策,因为您可能需要进行相反的转换: 更糟糕的是,在检查

  • 问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终

  • 问题内容: 在Java 9中,在Set接口上引入了称为of()的新静态工厂方法,该方法接受多个元素,甚至是元素数组。 我想将一个列表变成一个集合,以删除集合中的所有重复条目,这可以使用以下方法完成(在Java 9之前): 但是我认为使用这种新的Java 9静态工厂方法很酷: 其中是先前定义的字符串列表。 但是,可惜的是,当元素重复时,java抛出了一个,该方法的Javadoc中也对此做了说明。为什

  • 我试图在Java中将扫描字符串转换为JSONObject,并从JSON Simple导入JSON模块。我已经在构建路径中添加了JSON-simple-1.1.1.jar。然而,当我试图传递内联字符串时。我的内联字符串如下:{“events”:[{“url”:“/操纵多云国家”,“visitorId”:“03c0b5e0-3eeb-382a-8c6d-35e4bb189cf6”,“timestamp

  • 如果你注释掉的内部循环,它会抛出,这显然是因为我们对集合做了更改。 如果取消注释,为什么这个循环允许我们添加这两项?运行它需要一段时间(在奔腾CPU上)大约半分钟,但它不会抛出,有趣的是,它输出: 这有点出乎意料,但它表明我们可以改变,它实际上改变了集合。知道为什么会发生这种行为吗?