我目前正在开发一种能够录制键盘和键盘的基本实用程序软件。鼠标输入,将输入保存到.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();
}
此程序遵循一系列基本事件:1数据初始化,2按鼠标,3移动鼠标,4释放鼠标。与我成功实现的另一种方法不同,此方法不会在任何时候按下鼠标,没有明显的原因。鼠标移动与播放功能完美配合。我似乎无法使机器人执行除移动之外的任何类型的鼠标事件,即使我重构了该方法。
我尝试编辑方法以确保机器人在按下GUI上的“播放”按钮时不按鼠标,以免弄乱鼠标事件的焦点。该错误可能与代码的其他方面无关,因为程序中的其他所有内容都可以顺利运行。对象“mouseRobot”是Java.awt.Robot类的基本扩展类,具有复合Robot鼠标方法()的基本接口,我甚至直接从Robot类调用mousePress方法。
这种方法中可能出现的故障是什么?
答案 0 :(得分:0)
解决。改进了处理鼠标移动以每帧进行一次鼠标移动的方法。该类现在可以在鼠标移动之间准确地执行各种检查和数据更改,同时还允许其他类在不受冗长的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);
}
此方法效率更高,并且处理确定方向所需的所有标准,确定要使用的鼠标数据的文件索引,计算目标文件索引偏移,并且在鼠标移动之间具有适当的时间间隔。