我正在尝试制作一个自动点击器,但在捕获关键事件方面遇到问题,以便用户可以轻松停止该程序。我完全不知道出了什么问题,addKeyListener
也不起作用。有人可以帮忙吗?
这是我的代码:
AutoClickerMain
类
package com.autoclicker;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class AutoClickerMain {
public static boolean generate = true;
public AutoClickerMain(){
addKeyListener(new KeyInput());
}
public static void main(String[] args) throws InterruptedException{
JFrame frame = new JFrame("Auto Clicker");
frame.setSize(1086, 1200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("AutoClicker", SwingConstants.CENTER);
frame.add(label);
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.pack();
frame.setVisible(true);
try {
Robot robot = new Robot();
while (true){
Thread.sleep(500);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
} catch (AWTException e) {
e.printStackTrace();
}
}
}
KeyInput
类
package com.autoclicker;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyInput extends KeyAdapter {
@Override
public void keyPressed(KeyEvent event) {
AutoClickerMain.generate = false;
}
}
最佳答案
您无法使用 Java swing 编写代码来捕获所有全局(操作系统)键盘事件。仅当焦点位于 JFrame 上时,您才能捕获按键事件。 示例:
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
System.out.println("Got key event!");
return false;
}
});
如果您想捕获全局关键事件而不关注使用 java 的应用程序,您将需要 JNI 和高级操作系统相关代码。
关于Java(Swing)监听按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40338414/