[英]Java: Thread.sleep mousepress delay
我一直在嘗試使用jnativehook在java中創建一個autoclicker。 它工作正常,甚至編譯和運行。 我的問題是使用Thread.sleep
嘗試在點擊之間添加延遲:
bot.mousePress(InputEvent.BUTTON1_MASK);
Thread.sleep(50);
bot.mouseRelease(InputEvent.BUTTON1_MASK);
如果我輸入延遲0,它將正常運行。 但沒有延遲,它會點擊太快。 當我添加一個延遲時它會點擊很好但是,當我釋放觸發鍵時,它會在點擊時間的情況下繼續點擊幾秒鍾。 但是延遲為0不會這樣做。
完整代碼:
public class App implements NativeKeyListener{
private JPanel panel1;
private JTabbedPane tabbedPane1;
private JButton spoilerButton;
private JSlider slider1;
private JSlider slider2;
//Removed irrelevant code...
static Robot bot;
static {
try {
bot = new Robot();
} catch (Exception e) {
e.printStackTrace();
}
}
static boolean pressed;
public void click() throws InterruptedException {
try {
bot.mousePress(InputEvent.BUTTON1_MASK);
Thread.sleep(50);
bot.mouseRelease(InputEvent.BUTTON1_MASK);
} catch (Exception e) {
e.printStackTrace();
}}
@Override
public void nativeKeyPressed(NativeKeyEvent e) {
if (NativeKeyEvent.getKeyText(e.getKeyCode()) == "Delete") {
pressed = true;
while (pressed){
try {
click();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
if (NativeKeyEvent.getKeyText(e.getKeyCode())=="Delete"){
pressed=false;
}}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
}
public static void main(String[] args) {
JFrame frame = new JFrame("Autoclicker");
frame.setContentPane(new App().panel1);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setSize(400,148);
frame.setResizable(false);
try{GlobalScreen.registerNativeHook();
} catch (Exception e){
System.exit(1);}
GlobalScreen.addNativeKeyListener(new App());
}
}
看起來像持續按下觸發鍵時連續調用nativeKeyPressed()方法。 這導致多次調用click()方法(假設它是多線程的)並且由於鼠標按下和釋放之間的睡眠()(釋放后鼠標點擊完成),這可能發生。
因此,您可以嘗試兩個選項,具體取決於根本原因:
1.釋放鼠標后移動sleep()調用。 如果同時調用nativeKeyPressed,則無效。
2.按下觸發器時,使用不同的線程執行click()方法。 在這種情況下,您可能需要每次使用“按下”檢查並單擊()調用時向線程提交Runnable對象。 這將確保在按下變為false后它不會運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.