2016-05-18 50 views
0

當我運行腳本時,瀏覽器繼續永久打開新選項卡,直到我在任務管理器中結束進程。這個循環不應該只打開瀏覽器一次嗎?即使您忽略while循環並只關注瀏覽器請求,我也會得到相同的行爲。這是否與try/catch有關?這裏有什麼問題?循環在Java類中不存在

Desktop d = Desktop.getDesktop();  

Boolean doOnce = false; 

while (doOnce == false) { 
    try { 
     d.browse(new URI("http://localhost")); 
     doOnce = true; 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+1

爲什麼要執行一次循環?爲什麼循環呢? – Pooya

+0

因爲我認爲我的服務器正在做一些有趣的事情,並且通過提供流控制結構,我可以阻止任何正在發生的事情。 – santafebound

+0

如果您必須至少執行一次代碼,您可以嘗試執行do-while循環。 – jcool

回答

2

如果你只想在while執行一次try/catch塊,你應該把doOnce在finally塊:

try 
{ 
    d.browse(...); 
} catch (URISyntaxException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}finally{ 
doOnce = true; 
} 

但如果你想在異常發生,你應該把從while退出它在catch塊中:

try 
{ 
    d.browse(...); 
} catch (URISyntaxException e) { 
    doOnce = true; 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

那麼我應該把它放在兩個好的措施? – santafebound

+0

事實上,它是在我的''doGet(HttpServletRequest ...'''方法與多次執行有什麼關係? – santafebound

+0

我認爲第二個適用於你的情況 – Moolerian

2

如果d.browse(....)引發異常並且doOnce = true將永遠不會執行。

將doOnce = true移入finally塊,它應該可以工作。

+2

什麼是隻有一次執行過的「循環」? –

+1

@ 911DidBush遊戲LOC性能評測指標:P – mcfinnigan

+0

哈哈哈。給我了! – santafebound

1
try 
{ 
    d.browse(...); 
    doOnce = true; 
} catch (URISyntaxException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

如果您對上述browse的呼叫引發異常,您將不會設置退出標誌。

你爲什麼在循環中做這件事?如果你的意圖是隻做一次這個步驟,那麼只做一次陳述而不是使用流量控制結構。

+0

''d.browse(「...'''獨自一個人仍然可以打開瀏覽器一百萬次。這可能與Tomcat有關嗎? – santafebound