Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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 没有组件的EventListener_Java_Keylistener_Event Listener_Keylogger - Fatal编程技术网

Java 没有组件的EventListener

Java 没有组件的EventListener,java,keylistener,event-listener,keylogger,Java,Keylistener,Event Listener,Keylogger,我可以有一个Java程序,它可以在没有组件的情况下监听键盘吗 我可以在没有可视组件的情况下使用界面KeyListener吗 我不需要java.awt中的任何功能。我不需要任何窗口/组件之类的。我只想让程序对一些输入做出反应 我可以有一个Java程序,它可以在没有组件的情况下监听键盘吗 没有 我可以在没有可视组件的情况下使用界面KeyListener吗 否。必须存在接受输入的东西,以便调用KeyListener。向组件注册KeyListener。需要具有某种类型的输入组件,以便您可以注册KeyLi

我可以有一个Java程序,它可以在没有组件的情况下监听键盘吗

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

我不需要java.awt中的任何功能。我不需要任何窗口/组件之类的。我只想让程序对一些输入做出反应

我可以有一个Java程序,它可以在没有组件的情况下监听键盘吗

没有

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


否。

必须存在接受输入的东西,以便调用KeyListener。向组件注册KeyListener。需要具有某种类型的输入组件,以便您可以注册KeyListener

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

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

Re“我可以在没有可视组件的情况下使用界面KeyListener吗?”

是的,你可以(如果问题是自问的):

包igb.so.SO19706590;
导入静态java.lang.System.out;
导入java.awt.TextField;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
类KeyEventProducerConsumerSample{
公共静态void main(最终字符串[]args){
final KeyEventProducerConsumerSample kes=新的KeyEventProducerConsumerSample();
最终KeyEventProducer kep=kes.new KeyEventProducer();
最终KeyEventConsumer kec=kes.new KeyEventConsumer();
kep.addKeyListener(kec.raise();
}//main()
类KeyEventProducer{
KeyListener kl;
KeyEventProducer addKeyListener(最终KeyListener kl){
this.kl=kl;
归还这个;
}//addKeyListener()
/**以编程方式创建KeyEvents,不涉及键盘
*并将它们告知KeyEventConsumer(KeyListener)。
*/
作废{
keyTyped(newkeyevent(newtextfield(),1,1,1,1,1,'1');
kl.keyPressed(newkeyevent(newtextfield(),2,2,2,2,'2'));
kl.keyReleased(newkeyEvent(newtextfield(),3,3,3,3,'3'));
}//raise()
}//KeyEventProducer
/**使用没有任何可视组件的KeyListener接口。
*/
类KeyEventConsumer实现KeyListener{
@凌驾
public void keyTyped(final KeyEvent ke){
out.println(ke);
}
@凌驾
按下公共无效键(最终键事件){
out.println(ke);
}
@凌驾
已发布公共无效密钥(最终密钥事件){
out.println(ke);
}
}//KeyEventConsumer
}//KeyEventProducerConsumerSample
输出
不,我在我的电脑上运行一些实验,希望通过按下ESC来退出实验,这会导致实验的过早结束,节省中间结果。因此,在屏幕上设置一个“停止”按钮,并附加一个动作监听器。很可能。只有一个按钮的窗口似乎是多余的。请不要说任何人的严肃评论都是胡说八道。那么为什么JVM不能在没有窗口的情况下向我的程序发送信号呢?为什么我不能在没有窗口的情况下注册KeyListener?这是可能的,但现在似乎什么都不存在。你最好在一些本机上创建一个JNI挂钩代码。“最好在一些本机代码中创建一个JNI钩子”,这应该是您的答案的一部分。我认为这是实现不使用(拥有的-Java)组件的日志记录的唯一方法。@AndrewThompson:Done。我们自己问了第二个问题:您应该澄清,即使它使用KeyListener,它实际上也不会监听您的键盘。
java.awt.event.KeyEvent[unknown type,keyCode=1,keyText=Unknown keyCode: 0x1,keyChar='1',modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on textfield0
java.awt.event.KeyEvent[unknown type,keyCode=2,keyText=Unknown keyCode: 0x2,keyChar='2',modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on textfield1
java.awt.event.KeyEvent[unknown type,keyCode=3,keyText=Cancel,keyChar='3',modifiers=Ctrl+Shift,extModifiers=Ctrl+Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on textfield2