Я создал программу, которая автоматизирует определенные функции на моем месте деятельности, но я пытаюсь доказать это, но это не может пойти не так, и я столкнулся с ошибкой, которая не должна происходить.Функция ожидания имеет логическую ошибку
В основном то, что делает мой метод, ждет, пока электронная таблица перестанет заполняться и автоматически отформатирована, поэтому я могу сделать с ней что-то другое. Весь этот метод должен сделать, это снять снимок экрана, подождать, сделать еще один снимок экрана, и если они будут такими же, то продолжайте, если не подождите еще несколько.
вот методы.
private boolean WaitTillDone() {
BufferedImage image1;
BufferedImage image2;
image1 = siri.createScreenCapture(new Rectangle(0,0,width,height-80));
wait(4000);
image2 = siri.createScreenCapture(new Rectangle(0,0,width,height-80));
boolean same = bufferedImagesEqual(image1,image2);
return same;
}
public boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) {
if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
for (int x = 0; x < img1.getWidth(); x++) {
for (int y = 0; y < img1.getHeight(); y++) {
if (img1.getRGB(x, y) != img2.getRGB(x, y)) return false;
}
}
}
else {
return false;
}
return true;
}
Вот петля, что это вызывается в.
do{
running = WaitTillDone();
wait(800);
}while(running);
Программа петли в порядке, но иногда, когда изображения не то же самое, и это ждать, что будет ввести «бесконечный» петля. Я говорю «бесконечный», потому что без ввода пользователем он не будет продолжаться. Однако, если я нажимаю любую кнопку со стрелкой или вхожу только для перемещения выделенного поля в excel, чтобы изображения были разными, он будет продолжаться без проблем. Поэтому мне было интересно, есть ли что-то, что я делал неправильно (помимо вызова wait (Thread.sleep) в цикле), что приведет к тому, что моя программа получит эту логическую ошибку.
EDIT: Эта проблема не возникает каждый раз, только около 1/4 раза. Эта проблема решена, ошибка заключалась в том, чтобы сделать это. Предполагалось, что это должно быть
do{
running = WaitTillDone();
wait(800);
}while(!running);
Благодарим всех вас за помощь.
, что является причиной добавления ** ожидания (4000) ** функция ** WaitTillDone() ** ** между image1 ** и ** ** iMAGE2 инициализации? –
, чтобы электронная таблица продолжала заполняться и форматироваться. Если бы у меня не было ожиданий, значит, изображения будут слишком быстрыми и дадут ложный результат. Подумайте об этом таким образом, вы делаете снимки на «регулярном» интервале, чтобы увидеть, когда все движение остановится. –
Я думаю, вам нужно отлаживать различия с изображениями. Я сомневаюсь, что ошибка в логике выше, и, скорее всего, что-то происходит с изображениями, поскольку только один пиксель должен быть другим. Вы можете рассмотреть процентный порог, например, 0,1% или 100 пикселей.Возможно ли, что когда Excel находится в состоянии ожидания, он редактирует цвет курсора или что-то в этом роде. –