Робот не нажимает мышь во время движения мыши - PullRequest
0 голосов
/ 19 мая 2018

В настоящее время я работаю над основным служебным программным обеспечением, которое может записывать ввод с клавиатуры и мыши, сохранять ввод в файл .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 Ответ

0 голосов
/ 23 мая 2018

решаемая.Улучшен метод, в котором обрабатываются движения мыши, чтобы сделать одно движение мыши на кадр.Класс теперь может точно выполнять различные проверки и изменения данных между движениями мыши, а также позволяет другим классам функционировать, не задерживаясь при длительном цикле 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);
}

Этот метод значительно более эффективен и обрабатывает все критерии, необходимые для определения направления, определения индекса файла данных мыши.используется, рассчитывает смещения индекса целевого файла и имеет надлежащие временные интервалы между движениями мыши.

...