簡體   English   中英

Java:Thread.sleep mousepress延遲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM