没有Component的EventListener

时间:2013-10-31 12:29:17

标签: java keylistener event-listener keylogger

我是否可以拥有一个没有组件的情况下监听键盘的Java程序?

我可以在没有可视组件的情况下使用Interface KeyListener吗?

我不需要java.awt中的任何功能。我不需要任何窗户/组件等。我只是希望程序对某些输入做出反应。

3 个答案:

答案 0 :(得分:1)

  

我是否可以拥有一个没有组件的情况下监听键盘的Java程序?

没有

  

我可以在没有可视组件的情况下使用Interface KeyListener吗?

没有。

答案 1 :(得分:1)

必须接受输入以便调用KeyListener。您使用组件注册KeyListener。需要某种输入组件,因此您可以注册KeyListener。

请记住,您的代码位于JVM内部。 JVM是从底层操作系统获取直接信号的人 - 而不是您的代码。

您可以尝试在某些本机代码中创建JNI挂钩。

答案 2 :(得分:0)

关于„ 我可以在没有可视组件的情况下使用Interface KeyListener吗?

是的,您可以(如果问题本身):

image: node:12.18.3 # change to match your project's node version

cache:
  paths:
    - node_modules/

before_script:
  - rm -rf build
  - CI=false npm install

pages:
  stage: deploy
  script:
    - CI=false npm run build
    - rm -rf public
    - cp build/index.html build/404.html
    - mv build public
  artifacts:
    paths:
      - public
  only:
    - master

输出

package igb.so.SO19706590;

import static java.lang.System.out;

import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

class KeyEventProducerConsumerSample {

    public static void main( final String[] args ) {

        final KeyEventProducerConsumerSample kes = new KeyEventProducerConsumerSample();
        final KeyEventProducer kep = kes.new KeyEventProducer();
        final KeyEventConsumer kec = kes.new KeyEventConsumer();

        kep.addKeyListener( kec ).raise();
    } // main()

    class KeyEventProducer {

        KeyListener kl;

        KeyEventProducer addKeyListener( final KeyListener kl ) {

            this.kl = kl;
            return this;
        } // addKeyListener()

        /** Creating KeyEvents programmatically, with no keyboard involved
         * and informing the KeyEventConsumer (KeyListener) about them.
         */
        void raise() {

            kl.keyTyped( new KeyEvent( new TextField(), 1, 1, 1, 1, '1' ) );
            kl.keyPressed( new KeyEvent( new TextField(), 2, 2, 2, 2, '2' ) );
            kl.keyReleased( new KeyEvent( new TextField(), 3, 3, 3, 3, '3' ) );
        } // raise()

    } // KeyEventProducer

    /** Using KeyListener interface without any visual component.
     */
    class KeyEventConsumer implements KeyListener {

        @Override
        public void keyTyped( final KeyEvent ke ) {
            out.println( ke );
        }

        @Override
        public void keyPressed( final KeyEvent ke ) {
            out.println( ke );
        }

        @Override
        public void keyReleased( final KeyEvent ke ) {
            out.println( ke );
        }

    } // KeyEventConsumer

} // KeyEventProducerConsumerSample