Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jnativehook无法找到如何触发关键事件_Java_Hook - Fatal编程技术网

Java jnativehook无法找到如何触发关键事件

Java jnativehook无法找到如何触发关键事件,java,hook,Java,Hook,我一直在尝试jnativehook库和提供的示例,但我仍然无法触发密钥方法版本 package hookexample; import java.awt.EventQueue; import java.awt.Toolkit; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.ArrayList; import java.util.List; import java

我一直在尝试jnativehook库和提供的示例,但我仍然无法触发密钥方法版本

package hookexample;

import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class NativeHookDemo extends JFrame implements NativeKeyListener, WindowListener {
    public NativeHookDemo() {
        // Set the event dispatcher to a swing safe executor service.
        GlobalScreen.getInstance().setEventDispatcher(new SwingExecutorService());

        setTitle("JNativeHook Swing Example");
        setSize(300, 150);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        addWindowListener(this);
        setVisible(true);
    }

    public void windowOpened(WindowEvent e) {
        //Initialze native hook.
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());
            ex.printStackTrace();

            System.exit(1);
        }

        GlobalScreen.getInstance().addNativeKeyListener(this);
    }

    public void windowClosed(WindowEvent e) {
        //Clean up the native hook.
        GlobalScreen.unregisterNativeHook();
        System.runFinalization();
        System.exit(0);
    }

    public void windowClosing(WindowEvent e) { /* Unimplemented */ }
    public void windowIconified(WindowEvent e) { /* Unimplemented */ }
    public void windowDeiconified(WindowEvent e) { /* Unimplemented */ }
    public void windowActivated(WindowEvent e) { /* Unimplemented */ }
    public void windowDeactivated(WindowEvent e) { /* Unimplemented */ }

    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key released!");
        if (e.getKeyCode() == NativeKeyEvent.VC_SPACE) {
            JOptionPane.showMessageDialog(null, "This will run on Swing's Event Dispatch Thread.");
        }
    }

    public void nativeKeyPressed(NativeKeyEvent e) { /* Unimplemented */ }
    public void nativeKeyTyped(NativeKeyEvent e) { /* Unimplemented */ }

    public static void main(String[] args) {
         SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SwingExample();
            }
        });
    }

    private class SwingExecutorService extends AbstractExecutorService {
        private EventQueue queue;

        public SwingExecutorService() {
            queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
        }

        public void shutdown() {
            queue = null;
        }

        public List<Runnable> shutdownNow() {
            return new ArrayList<Runnable>(0);
        }

        public boolean isShutdown() {
            return queue == null;
        }

        public boolean isTerminated() {
            return queue == null;
        }

        public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
            return true;
        }

        public void execute(Runnable r) {
            EventQueue.invokeLater(r);
        }
    }
}
package-hooke示例;
导入java.awt.EventQueue;
导入java.awt.Toolkit;
导入java.awt.event.WindowEvent;
导入java.awt.event.WindowListener;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.concurrent.AbstractExecutorService;
导入java.util.concurrent.TimeUnit;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.SwingUtilities;
导入javax.swing.WindowConstants;
导入org.jnativehook.GlobalScreen;
导入org.jnativehook.NativeHookException;
导入org.jnativehook.keyboard.NativeKeyEvent;
导入org.jnativehook.keyboard.NativeKeyListener;
公共类NativeHookDemo扩展JFrame实现NativeKeyListener、WindowListener{
public NativeHookDemo(){
//将事件调度器设置为swing安全执行器服务。
GlobalScreen.getInstance().setEventDispatcher(新SwingExecutorService());
setTitle(“JNativeHook摆动示例”);
设置大小(300150);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
addWindowListener(此);
setVisible(真);
}
公共无效窗口已打开(WindowEvent e){
//初始化本机钩子。
试一试{
GlobalScreen.registerNativeHook();
}
捕获(本地钩子例外){
System.err.println(“注册本机钩子时出现问题”);
System.err.println(例如getMessage());
例如printStackTrace();
系统出口(1);
}
GlobalScreen.getInstance().addNativeKeyListener(此);
}
公共无效窗口关闭(WindowEvent e){
//清理本机钩子。
GlobalScreen.unregisterNativeHook();
System.runFinalization();
系统出口(0);
}
公共无效窗口关闭(WindowEvent e){/*未实现*/}
public void windowIconified(WindowEvent e){/*未实现*/}
public void windowdeconified(WindowEvent e){/*未实现*/}
public void windowActivated(WindowEvent e){/*未实现*/}
public void windowDeactivated(WindowEvent e){/*未实现*/}
公共无效nativeKeyReleased(NativeKeyEvent e){
System.out.println(“密钥已释放!”);
if(例如getKeyCode()==NativeKeyEvent.VC_空间){
showMessageDialog(null,“这将在Swing的事件调度线程上运行”);
}
}
public void nativeKeyPressed(NativeKeyEvent e){/*未实现*/}
public void nativeKeyTyped(NativeKeyEvent e){/*未实现*/}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
新SwingExample();
}
});
}
私有类SwingExecutorService扩展了AbstractExecutorService{
私有事件队列;
公共SwingExecutorService(){
queue=Toolkit.getDefaultToolkit().getSystemEventQueue();
}
公共空间关闭(){
队列=空;
}
公开列表关闭现在(){
返回新的ArrayList(0);
}
公共布尔值isShutdown(){
返回队列==null;
}
公共布尔值已取消(){
返回队列==null;
}
公共布尔等待终止(长超时,TimeUnit)抛出InterruptedException{
返回true;
}
public void execute(可运行的r){
调用器(r);
}
}
}

我只是简单地复制了上的示例,将类名与包名一起更改,并在nativekeyreased()中插入了系统print in console命令。添加了该库(JNativeHook v1.2.0-RC3)。当我运行代码时,它会在控制台中显示鼠标和按键事件的日志,但nativeKeyReleased()不会触发。我错过什么了吗

有人使用过这个插件吗?我注意到RC2不太稳定。试试beta2。是的,我降级了,工作很好。谢谢你的帮助。你测试过RC4吗?如果出现问题,请向github报告错误。