Java robot ломается в цикле

153
19 февраля 2021, 17:40

Недавно столкнулся с такой проблемой, как невозможность последовательного выполнения большого количества команд в цикле for в комбинации с java.robot. После 4 захода происходит следующее - не нажимается определённое сочетание клавиш, но код продолжает работать,в результате чего происходит поломка всего цикла действий. Есть ли какие-либо особенности java.robot, в результате которых некоторые кнопки им могут не нажиматься или теряться последовательность исполнения действий в цикле?

    bot.keyPress(KeyEvent.VK_CONTROL);
    bot.keyPress(KeyEvent.VK_C); 
    bot.delay(300);
    bot.keyRelease(KeyEvent.VK_CONTROL);
    bot.keyRelease(KeyEvent.VK_C);
    bot.delay(300);
    Thread.sleep(100);

    flavor=DataFlavor.stringFlavor;//2-3 end list cheker
    String st_h;
    Clipboard clipboard= Toolkit.getDefaultToolkit().getSystemClipboard();
    st_h = (String) clipboard.getData(flavor);        
    if(st_h.charAt(0)=='!')
        {
            stopper=2;
            System.err.println("Programm compleate");
        }
    if(stopper==2)break;
    bot.keyPress(KeyEvent.VK_ALT);//4 ALT+tab
    bot.keyPress(KeyEvent.VK_TAB); 
    bot.delay(300);
    bot.keyRelease(KeyEvent.VK_ALT);
    bot.keyRelease(KeyEvent.VK_TAB);
    bot.delay(300);
    Thread.sleep(100);
    bot.mouseMove(90, 200);//5 mouse set on button 
    bot.mousePress(InputEvent.BUTTON1_MASK);
    bot.mouseRelease(InputEvent.BUTTON1_MASK);
    bot.delay(300);
    Thread.sleep(1000);//6 mouse click
    bot.mouseMove(800, 265);//7 mouse set on field 
    bot.mousePress(InputEvent.BUTTON1_MASK);
    bot.mouseRelease(InputEvent.BUTTON1_MASK);
    bot.delay(300);
    Thread.sleep(100);//8 mouse click
    bot.keyPress(KeyEvent.VK_CONTROL);//16 'ctrl'+'v' 
    bot.keyPress(KeyEvent.VK_V);
    bot.keyRelease(KeyEvent.VK_CONTROL);
    bot.keyRelease(KeyEvent.VK_V);
    bot.delay(300);
    Thread.sleep(100);  
Answer 1

После небольшого количества экспериментов и использовании полученных советов была обнаружена ошибка, из-за которой последовательность действий бота могла нарушиться. Слишком малые паузы между исполнением команд и использование Thread.Sleep приводили к нестабильности в работе цикла. Пример рабочего кода из цикла расположен ниже. Если есть какие-то идеи по его доработке - пишите, будет приятно протестить их на практике.

    bot.delay(100);
    bot.keyPress(KeyEvent.VK_ALT);//4
    bot.keyPress(KeyEvent.VK_TAB); 
    bot.delay(100);
    bot.keyRelease(KeyEvent.VK_ALT);
    bot.keyRelease(KeyEvent.VK_TAB);
    bot.delay(300);

    bot.mouseMove(90, 200);//5 mouse set on button  'dobavit ylitci'
    bot.delay(100);
    bot.mousePress(InputEvent.BUTTON1_MASK);
    bot.mouseRelease(InputEvent.BUTTON1_MASK);
    bot.delay(300);
    //6 mouse click

    bot.delay(100);
    bot.mouseMove(800, 265);//7 mouse set on field 'vibrat'
    bot.delay(100);
    bot.mousePress(InputEvent.BUTTON1_MASK);
    bot.mouseRelease(InputEvent.BUTTON1_MASK);
    bot.delay(300);
READ ALSO
Преобразовать формат даты

Преобразовать формат даты

Приходит JSON вот с такой датой:

148
ошибка java.lang.NullPointerException, не стартует программа [закрыт]

ошибка java.lang.NullPointerException, не стартует программа [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

157
LoadingView из нескольких методов

LoadingView из нескольких методов

Использую Moxy для реализации MVP

172