2013-08-23 5 views
0

아래 코드는 키보드에서 control + A를 눌렀을 때 텍스트를 출력하고 시스템 트레이에 이미지를 표시하는 테스트 가능한 클래스입니다. 이것은 모두 운영 체제에서 지원하는 시스템 트레이에 따라 다릅니다.MenuShortcut KeyEvent가 작동하지 않습니다.

내 문제는 내가 + A 컨트롤을 밀 때 텍스트가 인쇄되지 않는다는 것입니다. 시스템 트레이에서 항목을 누르면 인쇄됩니다. 기본 Shift 키도 눌러야 할 것을 요구하는대로의 MenuItem이 생성자()

MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_A, false); 

을 시도해야 같은 API에서

/** 
* 
* @author Tyluur 
* @since Aug 23, 2013 
*/ 
public class Testable { 

public static void main(String... args) { 
    registerTrayItems(); 
} 

private static void registerTrayItems() { 
    if (SystemTray.isSupported()) { 
     SystemTray tray = SystemTray.getSystemTray(); 
     TrayIcon icon = null; 
     MenuShortcut shortcut = new MenuShortcut(KeyEvent.VK_A); 
     MenuItem menuItem = new MenuItem("Toggle", shortcut); 
     menuItem.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.err.println("The action has been called!"); 
      } 
     }); 
     PopupMenu popup = new PopupMenu(); 
     popup.add(menuItem); 
     try { 
      icon = new TrayIcon(new ImageIcon(new URL("http://i.imgur.com/xQoz2TN.png")).getImage(), "Typer", popup); 
      tray.add(icon); 
     } catch (MalformedURLException | AWTException e) { 
      e.printStackTrace(); 
     } 
    }  
} 

} 
+0

''내가 뭘 잘못하고 있니? '- 하나는 [sscce] (http://sscce.org)를 게시하지 말라. 우리가 테스트, 수정 및 실행할 수있는 코드를 게시하십시오. –

+0

SSCCE로 업데이트되었습니다. – Tyluur

+1

지옥, 같은 질문을 두 번 묻는 이유는 무엇입니까? 우리는 이전 질문에서 Java가 이러한 방식으로 작동하지 않는다고 말했고 KeyListeners는 포커스가없는 응용 프로그램에서는 작동하지 않으며 답변도 놀랍지도 여전히 동일합니다! –

답변

2

코드가 작동하지 않는 이유는 Java가 '전역 적으로'키 이벤트를 수신하지 않기 때문에 메뉴에 포커스가 있고 표시 될 때뿐입니다.

순수 자바 키로거를 작성할 가능성이없는 이유이기도합니다. Java는 윈도우 지향 메시지 만 캡처 할 수 있습니다. 항상 상단에있는과에 표시되지,

  • 사용 JNI/JNA/
  • 사용을 보이지 않는 창을 접선 글로벌 키에 액세스하기위한 네이티브 어떤 래퍼 :

    해결 방법은 다음 옵션 중 하나를 구현하는 것 이벤트를 캡처하는 시스템 트레이 나는 매력처럼 작동하지 않거나 당신의 사용자를 귀찮게 할지도 모른다.

상위 접근 방식은 어려운 것이 아니지만 네이티브 액세스를 사용해야하므로 응용 프로그램이 특정 플랫폼이됩니다.

행운을 빈다.

0

, 그것은 보인다.

+0

VK_A는 VK_A를 많은 프로그램에서 일반적으로 사용되는 단축키로 사용하고 잘못된 인수를 추가 했으므로 VK_A로 변경했지만 차이점은 없습니다. – Tyluur

+0

코드를 실행하면 @BartPelle에 동의합니다. 그러나 이것은 시프트 키를 필요로하는 고정해야합니다. – n0741337