Java JNativeHook将密钥写入textarea

Java JNativeHook将密钥写入textarea,java,swing,Java,Swing,当记录keyevents时,它将打印到控制台。但不向文本区域添加任何文本 我这里有一个框架: public class A extends javax.swing.JFrame { public A() { initComponents(); } @SuppressWarnings("unchecked") private void initComponents() { //code for components }

当记录keyevents时,它将打印到控制台。但不向文本区域添加任何文本

我这里有一个框架:

public class A extends javax.swing.JFrame {

public A() {
    initComponents();
}


@SuppressWarnings("unchecked")                         
private void initComponents() {
 //code for components
}                     

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {  
    try {
        GlobalScreen.registerNativeHook();
    }
    catch (NativeHookException ex) {
        System.err.println("There was a problem registering the native hook.");
        System.err.println(ex.getMessage());

        System.exit(1);
    }

    GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
    jTextArea1.append("logging started:\n");
}                                        
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new A().setVisible(true);
        }
    });
}

//calling this method when ever a keyevent is occured. but its not appending any text.
public void getTA(){
    jTextArea1.append("something was pressed");
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration                   
}
globalkeylistener的代码

public class GlobalKeyListenerExample implements NativeKeyListener {
A a;
public GlobalKeyListenerExample(){
  a = new A();
}

public void nativeKeyPressed(NativeKeyEvent e) {
    a.getTA();
    System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
}

public void nativeKeyReleased(NativeKeyEvent e) {
    a.getTA();
    System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
}

public void nativeKeyTyped(NativeKeyEvent e) {
    a.getTA();
    System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
}

}

当发生事件但未追加任何内容时,我调用getTA()。任何helkp都很好。

作为一个扩展框架,它正在代码的这一部分创建一个新框架

public GlobalKeyListenerExample(){
    a = new A();
}
。通过设置a.setVisible(true),它是可见的,并且每次事件发生时文本都会附加到此帧中的文本区域

public GlobalKeyListenerExample(){
    a = new A();
    a.setVisible(true);
}

感谢您的帮助。

作为一个扩展框架,它正在代码的这一部分中创建一个新框架

public GlobalKeyListenerExample(){
    a = new A();
}
。通过设置a.setVisible(true),它是可见的,并且每次事件发生时文本都会附加到此帧中的文本区域

public GlobalKeyListenerExample(){
    a = new A();
    a.setVisible(true);
}

感谢您的帮助。

正如我所说,您正在
GlobalKeyListenerExample
类中创建一个新的
class a
对象。因此,您有两个帧,一个是可见的,一个是隐藏的

当您调用
a.getTA()时
您正在调用从以下
GlobalKeyListenerExample
类创建的对象。因此,您将文本设置为不可见框架的jtextfield

public  GlobalKeyListenerExample(){
  a = new A();//invisible frame
}
那么如何解决这个问题呢。 一种方法是对类
A
实现
NativeKeyListener
,而不创建
GlobalKeyListener
类。因此,您可以像在
GlobalKeyListener
类中一样实现所有抽象方法

并使用
GlobalScreen.addNativeKeyListener(这个)以添加listner

范例

public class A extends javax.swing.JFrame implements NativeKeyListener {

    public A() {
        initComponents();
    }

    //implement abstract methods  
    @Override
    public void nativeKeyPressed(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            GlobalScreen.registerNativeHook();
        } catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());

            System.exit(1);
        }

        GlobalScreen.addNativeKeyListener(this);// add listner
        jTextArea1.append("logging started:\n");
    }

}

我无法测试此代码示例。如果您有任何问题,请询问。

正如我所说,您正在
GlobalKeyListenerExample
类中创建一个
类a
的新对象。因此,您有两个帧,一个是可见的,一个是隐藏的

当您调用
a.getTA()时
您正在调用从以下
GlobalKeyListenerExample
类创建的对象。因此,您将文本设置为不可见框架的jtextfield

public  GlobalKeyListenerExample(){
  a = new A();//invisible frame
}
那么如何解决这个问题呢。 一种方法是对类
A
实现
NativeKeyListener
,而不创建
GlobalKeyListener
类。因此,您可以像在
GlobalKeyListener
类中一样实现所有抽象方法

并使用
GlobalScreen.addNativeKeyListener(这个)以添加listner

范例

public class A extends javax.swing.JFrame implements NativeKeyListener {

    public A() {
        initComponents();
    }

    //implement abstract methods  
    @Override
    public void nativeKeyPressed(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
        a.getTA();
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        try {
            GlobalScreen.registerNativeHook();
        } catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());

            System.exit(1);
        }

        GlobalScreen.addNativeKeyListener(this);// add listner
        jTextArea1.append("logging started:\n");
    }

}

我无法测试此代码示例。如果您有任何问题,请询问。

是否要制作2帧?你有一个不可见的框架和文本附加到它的文本区域号。我有一个文本区和框中的一个按钮。和GlobalScreen.addNativeKeyListener(新的GlobalKeyListenerExample());单击按钮时调用。如果发生任何事件,我想通过调用setvisible像
public GlobalKeyListenerExample(){a=new a();a.setvisible(true);}
将“some text”附加到textarea.test,然后您就会看到。谢谢。它可以工作:)但每次都会弹出一个新窗口:你可以回答自己的问题。你想制作两帧吗?你有一个不可见的框架和文本附加到它的文本区域号。我有一个文本区和框中的一个按钮。和GlobalScreen.addNativeKeyListener(新的GlobalKeyListenerExample());单击按钮时调用。如果发生任何事件,我想通过调用setvisible像
public GlobalKeyListenerExample(){a=new a();a.setvisible(true);}
将“some text”附加到textarea.test,然后您就会看到。谢谢。但每次都会弹出一个新窗口:你可以回答你自己的问题。