Робот не нажимает мышь во время движения мыши
В настоящее время я работаю над базовым программным обеспечением, которое может записывать ввод с клавиатуры и мыши, сохранять ввод в файл.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 отпускание мыши. В отличие от другого метода, который я успешно реализовал, этот метод не нажимает кнопку мыши в любое время без видимой причины. Движение мыши прекрасно работает с функцией воспроизведения. Я просто не могу заставить Робота выполнить любое событие мыши, кроме движения, даже если я реструктурирую метод.
Я попытался отредактировать метод, чтобы убедиться, что робот не нажимает мышь во время нажатия кнопки "воспроизведение" в графическом интерфейсе, чтобы не мешать фокусировке события мыши. Вероятно, ошибка не связана с другими аспектами кода, потому что все остальное в программе работает без сбоев. Объект "mouseRobot" является базовым классом расширения класса Java.awt.Robot с базовым интерфейсом для сложных методов мыши Robot (), и я даже напрямую вызываю метод mousePress из класса Robot.
В чем может быть неисправность, возникающая в этом методе?
1 ответ
Решаемые. Улучшен метод, в котором обрабатываются движения мыши, чтобы сделать одно движение мыши на кадр. Класс теперь может точно выполнять различные проверки и изменения данных между движениями мыши, а также позволяет другим классам функционировать, не задерживаясь при длительном цикле for. Метод в вопросе был чрезвычайно неэффективным, непрактичным и в основном действовал как цикл "пока".
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);
}
Этот метод значительно более эффективен и обрабатывает все критерии, необходимые для определения направления, определения индекса файла данных мыши, которые будут использоваться, вычисляет смещения индекса целевого файла и имеет надлежащие временные интервалы между движениями мыши.