2016-05-18 19 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

なぜループを1回実行したいのですか?なぜループ? – Pooya

+0

私は自分のサーバーが面白いことをやっていると思っていたので、フロー制御構造を提供することによって、何がダウンしていたのかを止めることができました。 – santafebound

+0

コードをatleast一度だけ実行する必要がある場合は、do-whileループを試すことができます。 – jcool

答えて

2

あなたは一度だけwhileでtry/catchブロックを実行したい場合は、あなたのfinallyブロックでdoOnceを置く必要があります。

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

いますが、例外はあなたが置く必要があります発生したときwhileから終了する場合キャッチブロック内:

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

両方を適切に測る必要がありますか? – santafebound

+0

それは私の'' doGet(HttpServletRequest ... ''メソッドは複数回の実行と何か関係がありますか? – santafebound

+0

2番目のケースはあなたのケースに適していると思います – 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の呼び出しによって例外が発生した場合は、決して出口フラグを設定しません。

なぜこれをループで実行していますか?この手順を1回だけ行うことを目的としている場合は、フロー制御構造を使用するのではなく、文として1回行います。

+0

'' d.browse( "...' 'だけでもブラウザが100万回も開きます。これはTomcatと関係がありますか? – santafebound

関連する問題