当前位置: 首页 > 知识库问答 >
问题:

编辑-Java而循环意味着事件不被调用

鲜于意
2023-03-14

所以我在Cruncher的帮助下更新了我的代码,现在点击器似乎工作得更好。但是,当 while(按下)循环正在运行时,不会调用其他事件

公共类函数实现本机鼠标侦听器 {

private Robot robot;

private boolean pressed = false;

private boolean skip = false;

public Function()
{
    try {
        robot = new Robot();
    } catch (AWTException e) {
        e.printStackTrace();
    }
}

private void repeatMouse()
{
    skip = true;
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    while (pressed)
    {
        System.out.println("pressed while loop " + pressed);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void nativeMouseClicked(NativeMouseEvent nativeMouseEvent) {

}

@Override
public void nativeMousePressed(NativeMouseEvent nativeMouseEvent) {
    System.out.println("GG");
    if (!(nativeMouseEvent.getButton() == NativeMouseEvent.BUTTON1)) {
        System.out.println("Returned.");
        return;
    }
    if (!Native.get().getData().getEnabled())
    {
        System.out.println("Isn't enabled.");
        return;
    }

    pressed = true;
    repeatMouse();
}

@Override
public void nativeMouseReleased(NativeMouseEvent nativeMouseEvent) {
    System.out.println("released");
    if (!(nativeMouseEvent.getButton() == NativeMouseEvent.BUTTON1)) {
        System.out.println("Returned 2");
        return;
    }
    if (!skip)
    {
        System.out.println("pressed " + pressed);
        pressed = false;
        System.out.println("pressed " + pressed);
    } else {
        skip = false;
    }

}

}

知道为什么while循环会阻止事件被调用吗?我需要使用多线程还是一些爵士乐?

非常感谢。

共有1个答案

余靖
2023-03-14

首先,您的 main 方法不包含在代码中,但我假设它包含以下行(或类似代码):

新项目()

try {
    bot = new Robot();
} catch (AWTException e) {
    e.printStackTrace();
}

while (pressed) {
    bot.mousePress(InputEvent.BUTTON1_MASK);
    //bot.mouseRelease(InputEvent.BUTTON1_MASK);
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

现在让我们看看这段代码。当它运行时,pressed在开始时将为false(大概),它将退出,在以后的点击中不会运行。

你要做的是在注册点击时启动循环。让我们把它移到另一个方法中。

private void repeatMouse() {
    bot.mouseRelease(InputEvent.BUTTON1_MASK);
    while (pressed) {
        bot.mousePress(InputEvent.BUTTON1_MASK);
        bot.mouseRelease(InputEvent.BUTTON1_MASK);
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

现在让我们把它叫做鼠标向下本地钩子

@Override
public void nativeMousePressed(NativeMouseEvent nativeMouseEvent) {
    if (nativeMouseEvent.getButton() == NativeMouseEvent.BUTTON1)
    {
        pressed = true;
        System.out.println(pressed);
        repeatMouse();
    }
}

编辑:
似乎您的另一个问题是在第一个mouseRelease之后,处理程序将从本机库调用。我有一个潜在的解决方案

首先,在定义按下变量的位置旁边,定义一个新的 skip“释放”

boolean skipRelease = false;

然后,在每次调用鼠标发布之前,首先将跳过发布设置为 true。然后将鼠标释放处理程序更改为以下内容

@Override
public void nativeMouseReleased(NativeMouseEvent nativeMouseEvent) {
    if (nativeMouseEvent.getButton() == NativeMouseEvent.BUTTON1)
    {
        if(skipRelease) {
            skipRelease = false;
            return;
        }
        pressed = false;
        System.out.println(pressed);
    }
}
 类似资料:
  • 阅读的javadocs,我看到方法让我知道事件是否由其结果重复。 返回事件计数。如果事件计数大于1,则这是一个重复事件。 这到底是什么意思?这是否意味着两个或多个对象引用同一个“事件”(例如,正在创建的文件)? 我正在Oracle网站上试验新的API的示例,这一部分让我感到困惑,尤其是因为我会在同一测试代码的连续运行中获得不同数量的事件(其中我使用写入一个文件,而不与之手动交互),但的结果永远不会

  • 我正在使用AndroGuard从Android应用程序的源代码中收集API调用。一些检索到的API调用在其调用描述中有$符号,例如:或,而绝大多数调用都不包括这个美元符号。例如,。 $符号在一些编程中表示变量引用,但在API调用引用中找到它是很奇怪的。我在这里怎么解释?在API调用跟踪的上下文中,$符号意味着什么?

  • 我想创建一个

  • 我正在读一本关于JPA和EJB的书,上面有一行写着: “单例会话bean可以使用容器管理或bean管理的并发。默认为容器管理,对应于所有业务方法上的写锁。所有业务方法调用都是序列化的,因此在任何给定时间只有一个客户端可以访问bean。同步过程的实际实现由供应商提供。”-具体的。" 序列化方法调用意味着什么?为什么保证在任何给定时间只有一个客户机可以访问bean?

  • 问题内容: 我正在学习python,但不确定是否理解以下语句:“该函数(包括其名称)可以捕获 我们对问题的看法或抽象 。” 这是我不理解编程含义的粗体部分。引用来自http://www.openbookproject.net/thinkcs/python/english3e/functions.html 像计算机科学家一样思考,第3版。 谢谢 ! 问题答案: 抽象是所有计算机科学中的核心概念。没有

  • 我正在学习python,我不确定是否理解以下语句:“函数(包括它的名字)可以捕捉我们对问题的心理组块或抽象。” 我不理解粗体部分在编程方面的含义。引用自http://www.openbookproject.net/thinkcs/python/english3e/functions.html 如何像计算机科学家一样思考,第3版。 谢谢你!