我已經創建了一個程序,可以在我的業務地點自動執行某些功能,但我試圖假設它證明它不會出錯,並且遇到了不應該出現的錯誤。等待函數有邏輯錯誤
基本上我的方法正在等待,直到電子表格停止填充並自動格式化,以便我可以用它來做其他一些事情。所有這些方法所要做的就是拍攝屏幕截圖,等待,拍攝另一個屏幕截圖,如果它們相同,則繼續,如果不是等待更多。
這裏是方法。
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)),這會導致我的程序有這個邏輯錯誤。
編輯: 這個問題不是每次都發生,只有大約1/4的時間。 這個問題已經解決了,錯誤是這個do-while condidtion。它應該是
do{
running = WaitTillDone();
wait(800);
}while(!running);
謝謝大家的幫助。
背後是什麼加**等待(4000)**的**功能image1的**和** **圖像2之間的初始化** WaitTillDone()**的原因是什麼? –
以允許電子表格繼續被填充和格式化。如果我沒有在那裏等待,那麼它會以太快的速度拍攝圖像,並給出誤報。您可以這樣想,您正在以「常規」間隔拍攝快照,以查看所有移動何時停止。 –
我認爲你需要調整與圖像的差異。我懷疑錯誤是在上面的邏輯中,更可能是因爲只有一個像素必須有所不同,因此圖像會發生一些變化。您可能會考慮百分比閾值,如0.1%或100 px。有可能當Excel處於某種等待狀態時,它正在編輯光標的顏色或類似的東西。 –