Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Mousepress 机器人在鼠标移动过程中不按鼠标的方法_Mousepress - Fatal编程技术网

Mousepress 机器人在鼠标移动过程中不按鼠标的方法

Mousepress 机器人在鼠标移动过程中不按鼠标的方法,mousepress,Mousepress,我目前正在开发一个基本的实用软件,它能够记录键盘和鼠标输入,将输入保存到.txt文件,并在文件上回放数据。我正在修改程序以增加文件和播放功能。我遇到的问题是鼠标移动方法中的Robot.mousePress()方法: public static void executeMouseMovementData() { mouseRobot.mousePress(InputEvent.BUTTON1_MASK); for (int i=0; i < MouseDataHandler

我目前正在开发一个基本的实用软件,它能够记录键盘和鼠标输入,将输入保存到.txt文件,并在文件上回放数据。我正在修改程序以增加文件和播放功能。我遇到的问题是鼠标移动方法中的Robot.mousePress()方法:

public static void executeMouseMovementData() {

    mouseRobot.mousePress(InputEvent.BUTTON1_MASK);
    for (int i=0; i < MouseDataHandler.mouseData.size(); i++) {
        mouseRobot.moveMouse(MouseDataHandler.mouseData.get(i).getX(), MouseDataHandler.mouseData.get(i).getY());
        mouseRobot.delay(MouseDataHandler.mouseData.get(i).getTimeElapsed());
    }
    mouseRobot.releaseMouse();
}
publicstaticvoid executeMouseMovementData(){
mouseRobot.mousePress(InputEvent.BUTTON1_掩码);
for(int i=0;i
这个程序遵循一个基本的事件序列:1数据初始化,2按下鼠标,3移动鼠标,4释放鼠标。与我成功实现的另一种方法不同,这种方法在任何时候都不会因为任何明显的原因按下鼠标。鼠标移动与播放功能完美配合。我似乎无法让机器人执行除移动以外的任何类型的鼠标事件,即使我重新构造了方法

我尝试过编辑该方法,以确保机器人在按下GUI上的“回放”按钮时不会按下鼠标,以免弄乱鼠标事件的焦点。该错误可能与代码的其他方面无关,因为程序中的所有其他内容都运行顺利。对象“mouseRobot”是Java.awt.Robot类的一个基本扩展类,具有用于复合机器人鼠标方法()的基本接口,我甚至直接从Robot类调用mousePress方法

此方法中可能出现的故障是什么



已解决。改进了处理鼠标移动的方法,使每帧鼠标移动一次。该类现在可以在鼠标移动之间准确地执行各种检查和数据更改,同时还允许其他类在不受冗长for循环影响的情况下运行。这个问题中的方法效率极低,不切实际,基本上是一个“while”循环

public void handleMouseMovements() {
    if (shouldAttemptToMoveMouse) {
        if (!targetHasBeenReached(currentAdjustedX, currentAdjustedY, targetX, targetY)) {
            if (!movementCreated) {
                calculateDirection(startX, startY, targetX, targetY);
                getLineIndexToUse();
                initializeMoveData(repositoryFileIndex, fileIndex);
                movementCreated = true;
                firstTime = System.currentTimeMillis();
            }
            if (CMMI >= Main.mouseDataHandler.getSizeOfRepositoryIndex(repositoryFileIndex, fileIndex)){
                CMMI =0;
                loopMovement();
            }
            if (movementfileIndexTimeHasElapsed(repositoryFileIndex, fileIndex)) {
                moveMouse(repositoryFileIndex, fileIndex);
                CMMI++;
                firstTime = System.currentTimeMillis();
            }
        }
        else {
            resetData();
        }
    }
}
public void moveMouse(int repositoryFileIndex, int fileIndex) {
    currentX = MouseDataHandler.mdr.get(repositoryFileIndex).get(fileIndex).get(CMMI).getX();
    currentY = MouseDataHandler.mdr.get(repositoryFileIndex).get(fileIndex).get(CMMI).getY();
    currentAdjustedX = currentX + distanceX;
    currentAdjustedY = currentY + distanceY;
    Main.bot.moveMouse(currentAdjustedX + Main.getX(), currentAdjustedY + Main.getY() + 25);
}

此方法效率更高,可以处理确定方向、确定要使用的鼠标数据的文件索引、计算目标文件索引偏移量所需的所有条件,并且在鼠标移动之间具有适当的时间间隔

当鼠标在“向下”和“向上”事件之间移动过多时,程序通常不会记录单击。因此,首先,你似乎只是搞错了顺序。MouseData目前不处理记录的点击,它只模拟移动数据。我只是简单地调用Robot mousePress方法,它应该按住左键直到调用release方法。我用另一个类似的方法实现了同样的事情,没有问题。我不知道为什么在这个特殊的方法中它不会发送任何鼠标点击事件。