2013-04-10 3 views
0

휴대 전화에서 키보드 입력을 받고 로봇 클래스를 사용하여 컴퓨터에서 표시하려고합니다. 전화로부터 ascii를 얻었으므로 ascii에 대한 VirtualKey 값 변환에 대한 해시 맵이 있습니다. 하지만 현재 코드에는 이상한 행동이 있습니다. 해시 맵에서 특정 심볼을 매핑하려고 할 때! "@ @ 나는 그것을 실행할 때 NullPointer Reference 예외를 얻습니다 .example의 경우!, 전화는 오른쪽 유니 코드 값 (33)을 보내고 해시 테이블에 나는 (int) '!' ? 또한 그래서이 매핑되는 것입니다하지만 널 (null) :(누군가가 도움을 주시기 바랍니다 수 반환 VK_EXCLAMATION를 반환해야합니다 (33) 인 키, 여기에 Java에서 VirtualKey 코드의 이상한 동작

내가 조회를 할 경우 냈다 내 코드는 다음과 같습니다

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

그리고 내 해시 맵은 다음과 같습니다.

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)'/'); 
    . 
    . 
    . 
    . 
    } 

답변

0
당신은지도에 키와 값을 역으로

KeyEvent.VK_EXCLAMATION_MARK을해야

가와 상수 값 0x0205 (십진수 517). 그러나 당신은 실제로 33 코드에 의해 그것을 찾으려고 노력합니다. (int) '!' 그래서

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

과 :

올바른 순서 일 것이다.

+0

아, 네가 어리석은 짓 같았어요.하지만 그걸 따로 떼어 놓았습니다. 화면 상에, 맵핑 (int)의 영감을 표시! VK_KEYS.EXCLAMATION에. 그것은 교대로 누르기를 한 다음, 1 회의 기자 회견을 통해서만 할 수 있습니다. –