【问题标题】:Weird behavior of VirtualKey codes in javaJava中VirtualKey代码的奇怪行为
【发布时间】:2013-04-10 21:27:12
【问题描述】:

我正在从手机获取键盘输入,并尝试使用机器人类在计算机上显示该输入。由于我从电话中获得了 ascii,因此我有一个用于将 ascii 转换为 VirtualKey 值的哈希图。但是我当前的代码有一些奇怪的行为。当我尝试在哈希图中映射某些符号时,例如! “'@我在运行它时得到一个 NullPointer Reference 异常。例如,对于 ! ,电话发送正确的 unicode 值 (33) 并且在哈希表中我有 (int)'!'作为键,也是 33。所以它应该返回 VK_EXCLAMATION ,这是它映射到的,但它返回 null :( 有人可以帮忙吗?

这是我在查找时截取的代码:

int unicodekey = scanner.nextInt(); //unicode
    robotkey = ascii2VK.asciiForVirtualKey.get(unicodekey);
    robot.keyPress(robotkey);
    robot.keyRelease(robotkey);

我的 hashmap 看起来像这样:

public class ascii2VK {
      protected static final Map<Integer, Integer> asciiForVirtualKey;
            static {
                asciiForVirtualKey = new HashMap<Integer, Integer>();
                asciiForVirtualKey.put(KeyEvent.VK_UNDEFINED, 0);
                asciiForVirtualKey.put(KeyEvent.VK_QUOTE, (int)'\'');
                asciiForVirtualKey.put(KeyEvent.VK_QUOTEDBL,(int)'"');
                asciiForVirtualKey.put(KeyEvent.VK_AMPERSAND, (int)'&');
                asciiForVirtualKey.put(KeyEvent.VK_BACK_QUOTE, (int)'`');
                asciiForVirtualKey.put(KeyEvent.VK_NUMBER_SIGN, (int)'#');
                asciiForVirtualKey.put(KeyEvent.VK_EXCLAMATION_MARK, (int)'!');
                asciiForVirtualKey.put(KeyEvent.VK_AT, (int)'@');
                asciiForVirtualKey.put(KeyEvent.VK_DOLLAR, (int)'$');
                asciiForVirtualKey.put(KeyEvent.VK_BACK_SLASH, (int)'\\');
                asciiForVirtualKey.put(KeyEvent.VK_SLASH, (int)'/');
    .
    .
    .
    .
    }

【问题讨论】:

    标签: java hashmap ascii keyevent awtrobot


    【解决方案1】:

    您应该反转地图中的键和值。

    KeyEvent.VK_EXCLAMATION_MARK 是常量,值为 0x0205(十进制 517)。但是你尝试通过33码找到它,其实是(int)'!'

    这将是正确的顺序:

    asciiForVirtualKey.put((int)'!', KeyEvent.VK_EXCLAMATION_MARK);
    

    等等。

    【讨论】:

    • 哦,是的,我太傻了 :) 但除此之外,我意识到我仍然无法获得!屏幕上显示,尽管映射(int)!到 VK_KEYS.EXCLAMATION。只能通过按下 Shift 键,然后按下 1 键事件来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多