java中VirtualKey代码的怪异行为
我从手机上获取键盘输入,并尝试使用robot类在计算机上显示。因为我从电话中获得了ascii,所以我有一个用于ascii到VirtualKey值转换的哈希映射。但是我现在的代码有一些奇怪的行为。当我尝试映射hashmap中的某些符号时,例如!“@当我运行它时,我得到一个NullPointer引用异常。例如,对于!手机发送正确的unicode值(33),在哈希表中我有(int)'!作为键,也是33。因此它应该返回VK_感叹号,这是它映射到的,但它返回null:(有人能帮忙吗 以下是我在查找时截取的代码:java中VirtualKey代码的怪异行为,java,hashmap,ascii,keyevent,awtrobot,Java,Hashmap,Ascii,Keyevent,Awtrobot,我从手机上获取键盘输入,并尝试使用robot类在计算机上显示。因为我从电话中获得了ascii,所以我有一个用于ascii到VirtualKey值转换的哈希映射。但是我现在的代码有一些奇怪的行为。当我尝试映射hashmap中的某些符号时,例如!“@当我运行它时,我得到一个NullPointer引用异常。例如,对于!手机发送正确的unicode值(33),在哈希表中我有(int)'!作为键,也是33。因此它应该返回VK_感叹号,这是它映射到的,但它返回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)'/');
.
.
.
.
}
公共类ascii2VK{
受保护的静态最终地图AsciForVirtualKey;
静止的{
asciiForVirtualKey=newhashmap();
asciiForVirtualKey.put(KeyEvent.VK_未定义,0);
asciiForVirtualKey.put(KeyEvent.VK_QUOTE,(int)“”);
asciiForVirtualKey.put(KeyEvent.vkquotedbl,(int)“);
asciiForVirtualKey.put(KeyEvent.VK_-AMPERSAND,(int)&');
asciiForVirtualKey.put(KeyEvent.VK_BACK_QUOTE,(int)`');
asciiForVirtualKey.put(KeyEvent.VK_数字符号,(int)#);
asciiForVirtualKey.put(KeyEvent.VK_感叹号,(int)!);
asciiForVirtualKey.put(KeyEvent.VK_AT,(int)@');
asciiForVirtualKey.put(KeyEvent.VK_-DOLLAR,(int)“$”);
asciiForVirtualKey.put(KeyEvent.VK_BACK_斜杠,(int)\\);
asciiForVirtualKey.put(KeyEvent.VK_斜杠,(int)/);
.
.
.
.
}
您应该在地图中反转键和值
KeyEvent.VK_感叹号是一个值为0x0205(517十进制)的常量。但您试图通过33代码找到它,它实际上是(int)“!”
这将是正确的订购:
asciiForVirtualKey.put((int)'!', KeyEvent.VK_EXCLAMATION_MARK);
等等。哦,是的,我太傻了:)但除此之外,我意识到我仍然无法在屏幕上显示!到VK_键。感叹号。这只能通过按住shift键,然后按1键来完成。