簡體   English   中英

for 循環只執行一次

[英]for loop execute only once

代碼只執行一次。 免責聲明:很清楚這是一個無限循環,以這種方式編寫它作為解決問題的一部分。

更新:我的錯誤日志中有一個異常已修復,但問題仍然存在,代碼僅在我嘗試在相同代碼中為不同任務(打印句子)使用相同for循環時執行,並且運行良好,問題一定出在我的 JS 代碼上。

for(int i=0; i<i+1;i++) {
    ((JavascriptExecutor)driver).executeScript("window.open()"); 
    ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); 
    driver.switchTo().window(tabs.get(1));
    driver.get("https://www.google.com");
}

由於拋出異常,代碼僅執行一次,或者您進行的一個或多個網絡調用花費的時間太長,使您相信代碼只執行一次。

為了確認您在 for 循環中使用的值i + 1沒有被1替換,我在我的機器上運行了以下循環:

for (int i = 0; i < i + 1; i++) {
    System.out.println(i);
}

...它繼續打印從 0 開始的數字。

我只是想澄清這一點作為答案,因為我希望這個問題會被刪除。

for 循環不是你的問題。 您正在編寫有異常或阻塞正在運行的線程的代碼。 如果您使用另一個線程來運行它,則缺少UncaughtExceptionHandler可能會使其跳過被記錄。 類似地,使用Callable<T>可能會導致從個人經驗中吞下異常(也許出於同樣的原因?)。

如果您阻塞了運行它的線程,那么在阻塞方法將控制權返回到您調用它的上下文之前,該線程將不會運行其他任何東西。

鑒於你說你有循環“運行一次”但之后仍然打印的情況,我將把它作為一個例外,並且你運行測試的方式有缺陷。 這可能來自無數的原因,例如愚蠢的System#exit / Runtime#halt調用、線程、使用服務來運行測試,或者在某些生產環境中運行它們,例如游戲服務器或手機(或。 .. 瀏覽器?)。 對於未來的情況,理想情況下,您的問題應該是可重現的,只需要一個主要方法和您提供的代碼。 如果你不能做這樣的例子,至少你應該提供你是如何測試它的。

如果你做了所有這些但仍然有問題,我認為這對你來說很明顯,或者在這里閱讀你的問題的人會更容易為你回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM