You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KeyStroke.getKeyStroke获取的KeyStroke缺失字符值问题求助

问题:KeyStroke.getKeyChar()始终返回0xFFFF,无法获取外文输入法对应字符

我正在开发一款可显示选中键盘按键对应字符的应用,方便使用外文输入法的用户查看输入内容。但调用KeyStroke.getKeyStroke(int keyCode, int modifiers)方法后,返回的KeyStroke对象调用getKeyChar()始终返回0xFFFF。

测试代码

public void showKeys() {
  Field[] fields = KeyEvent.class.getDeclaredFields();
  Map<Integer, Field> fieldMap = new TreeMap<>();
  for (Field f : fields) {
    if ((f.getType() == Integer.TYPE) && f.getName().startsWith("VK")) {
      try {
        int value = (Integer) f.get(null);
        fieldMap.put(value, f);
      } catch (IllegalAccessException e) {
        throw new IllegalStateException("Should not happen", e);
      }
    }
  }
  for (int value = 44; value <= 90; ++value) {
    Field field = fieldMap.get(value);
    if (field != null) {
      // Setting the last parameter to false, or leaving it off, gives me the same thing.
      KeyStroke keyStroke = KeyStroke.getKeyStroke(value, 0, true);
      final char keyChar = keyStroke.getKeyChar();
      final int keyCode = keyStroke.getKeyCode();
      System.out.printf("%6d: %-30s -- %5d = 0x%04X: %c (0x%04X)%n",
          value, field.getName(), keyCode, keyCode, keyChar, (int) keyChar);
    }
  }
}

运行结果

44: VK_COMMA                       --    44 = 0x002C: Ôøø (0xFFFF)
45: VK_MINUS                       --    45 = 0x002D: Ôøø (0xFFFF)
46: VK_PERIOD                      --    46 = 0x002E: Ôøø (0xFFFF)
47: VK_SLASH                       --    47 = 0x002F: Ôøø (0xFFFF)
48: VK_0                           --    48 = 0x0030: Ôøø (0xFFFF)
49: VK_1                           --    49 = 0x0031: Ôøø (0xFFFF)
50: VK_2                           --    50 = 0x0032: Ôøø (0xFFFF)
51: VK_3                           --    51 = 0x0033: Ôøø (0xFFFF)
52: VK_4                           --    52 = 0x0034: Ôøø (0xFFFF)
53: VK_5                           --    53 = 0x0035: Ôøø (0xFFFF)
54: VK_6                           --    54 = 0x0036: Ôøø (0xFFFF)
55: VK_7                           --    55 = 0x0037: Ôøø (0xFFFF)
56: VK_8                           --    56 = 0x0038: Ôøø (0xFFFF)
57: VK_9                           --    57 = 0x0039: Ôøø (0xFFFF)
59: VK_SEMICOLON                   --    59 = 0x003B: Ôøø (0xFFFF)
61: VK_EQUALS                      --    61 = 0x003D: Ôøø (0xFFFF)
65: VK_A                           --    65 = 0x0041: Ôøø (0xFFFF)
66: VK_B                           --    66 = 0x0042: Ôøø (0xFFFF)
67: VK_C                           --    67 = 0x0043: Ôøø (0xFFFF)
68: VK_D                           --    68 = 0x0044: Ôøø (0xFFFF)
69: VK_E                           --    69 = 0x0045: Ôøø (0xFFFF)
70: VK_F                           --    70 = 0x0046: Ôøø (0xFFFF)
71: VK_G                           --    71 = 0x0047: Ôøø (0xFFFF)
72: VK_H                           --    72 = 0x0048: Ôøø (0xFFFF)
73: VK_I                           --    73 = 0x0049: Ôøø (0xFFFF)
74: VK_J                           --    74 = 0x004A: Ôøø (0xFFFF)
75: VK_K                           --    75 = 0x004B: Ôøø (0xFFFF)
76: VK_L                           --    76 = 0x004C: Ôøø (0xFFFF)
77: VK_M                           --    77 = 0x004D: Ôøø (0xFFFF)
78: VK_N                           --    78 = 0x004E: Ôøø (0xFFFF)
79: VK_O                           --    79 = 0x004F: Ôøø (0xFFFF)
80: VK_P                           --    80 = 0x0050: Ôøø (0xFFFF)
81: VK_Q                           --    81 = 0x0051: Ôøø (0xFFFF)
82: VK_R                           --    82 = 0x0052: Ôøø (0xFFFF)
83: VK_S                           --    83 = 0x0053: Ôøø (0xFFFF)
84: VK_T                           --    84 = 0x0054: Ôøø (0xFFFF)
85: VK_U                           --    85 = 0x0055: Ôøø (0xFFFF)
86: VK_V                           --    86 = 0x0056: Ôøø (0xFFFF)
87: VK_W                           --    87 = 0x0057: Ôøø (0xFFFF)
88: VK_X                           --    88 = 0x0058: Ôøø (0xFFFF)
89: VK_Y                           --    89 = 0x0059: Ôøø (0xFFFF)
90: VK_Z                           --    90 = 0x005A: Ôøø (0xFFFF)

尝试使用KeyEvent.getKeyText(int keyCode)方法仅支持英文,切换日语输入法后仍返回英文按键名称。已尝试该方法的两个重载版本,结果一致;遍历KeyStroke类所有字段也得到相同结果。请问是我的操作有误,还是该方法存在bug?


内容的提问来源于stack exchange,提问作者MiguelMunoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:19:49