import java.awt.event.KeyEvent; import java.io.File; import javax.swing.JOptionPane; import jxgrabkey.HotkeyConflictException; import jxgrabkey.HotkeyListener; import jxgrabkey.JXGrabKey; public class JXGrabKeyTest { private static final int MY_HOTKEY_INDEX = 1; private static boolean hotkeyEventReceived = false; public static void main(String[] args) throws Exception { //Load JXGrabKey lib System.load(new File("lib/libJXGrabKey.so").getCanonicalPath()); //Enable Debug Output JXGrabKey.setDebugOutput(true); //Register some Hotkey try{ //int key = KeyEvent.VK_K, mask = KeyEvent.CTRL_MASK | KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK; int key = KeyEvent.VK_F2, mask = KeyEvent.ALT_MASK; //Conflicts on GNOME JXGrabKey.getInstance().registerAwtHotkey(MY_HOTKEY_INDEX, mask, key); }catch(HotkeyConflictException e){ JOptionPane.showMessageDialog(null, e.getMessage(), e.getClass().getName(), JOptionPane.ERROR_MESSAGE); JXGrabKey.getInstance().cleanUp(); //Automatically unregisters Hotkeys and Listeners //Alternatively, just unregister the key causing this or leave it as it is //the key may not be grabbed at all or may not respond when numlock, capslock or scrollock is on return; } //Implement HotkeyListener HotkeyListener hotkeyListener = new jxgrabkey.HotkeyListener(){ public void onHotkey(int hotkey_idx) { if (hotkey_idx != MY_HOTKEY_INDEX) return; hotkeyEventReceived = true; } }; //Add HotkeyListener JXGrabKey.getInstance().addHotkeyListener(hotkeyListener); //Wait for Hotkey Event while(!hotkeyEventReceived){ Thread.sleep(1000); } // Shutdown JXGrabKey JXGrabKey.getInstance().unregisterHotKey(MY_HOTKEY_INDEX); //Optional JXGrabKey.getInstance().removeHotkeyListener(hotkeyListener); //Optional JXGrabKey.getInstance().cleanUp(); } }