我已经创建了一个程序,可以在我的营业地点自动化某些功能,但我正在尝试对其进行虚拟证明,这样它就不会出错,而且我遇到了一个不应该发生的错误。
基本上我的方法是等到电子表格停止被填充和自动格式化,这样我就可以用它做一些其他的事情。所有这个方法所要做的就是截屏,等待,再截屏,如果它们相同,则继续,如果不等的话。
这里是方法。
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 中移动选定的框,以便图像会有所不同,它将继续没有问题。所以我想知道我是否做错了什么(除了在循环中调用等待(a Thread.sleep))会导致我的程序出现这个逻辑错误。
编辑:这个问题并不是每次都发生,只有大约 1/4 的时间。这个问题解决了,错误是do-while条件。它应该是
do{
running = WaitTillDone();
wait(800);
}while(!running);
谢谢大家的帮助。