1

現在、ラッシュアワー中にフリーズする Java プログラムがあります。その理由を探しています。現時点では、一部のコードが AJAX ではないため、ラッシュアワー中にサーバーから JSON オブジェクトを要求するとハングすることが原因であると考えられます (ラッシュアワー中はインターネットの速度が遅くなります)。しかし、それがAJAXではないかどうかはよくわかりません。会社の財産に関連するため、ここにすべてのコードを貼り付けることができないため、コード/疑似コードをいくつか記述します。プログラムは、以下を使用して要求を実行します。

 URL url = new URL("http://www.xxxxxxxx.com/");
 URLConnection conection = url.openConnection();
 BufferedReader in = new BufferedReader(new InputStreamReader(conection .getInputStream()));
 String inputLine;
 String content = "";
 while ((inputLine = in.readLine()) != null) { 
            content += inputLine;
        }
 in.close();
 json = new JSONObject(content);

上記のコードは、フリーズを引き起こすと思われるプログラムの一部です。私の質問は、このコードは AJAX を使用していないようで、マルチスレッドではありませんよね? インターネット接続が非常に遅い場合、ハングアップする (フリーズする) ことはありますか? 私はこれについてあまり経験がありません。助けてください。

これがフリーズを引き起こす主な理由だと思わない場合、一般的に言えば、この種の問題の最も考えられる理由は何ですか. 前もって感謝します。

編集/更新:

  1. 私のプログラムは、クライアント側で実行されるスイング プログラムです。このアプリケーションには実際のサーバー側コードはありません。URL アドレスは、プログラムが必要とするある種のデータを提供するサードパーティ サーバーです。プログラムがスレッドを使用していることはわかりませんでした。私が見るように、それは基本的にスレッドを使用しないコアJavaであり、マルチスレッドにあまり慣れていないため、よくわかりません。(プログラムは私が書いたものではなく、元プログラマーが書いたものです) そのため、他のスレッドを使用してこのサーバー要求を実行する必要があるときに、他のスレッドを使用しなかったのではないかと考えています。

  2. フリーズとは、ラッシュアワーに特定の機能を実行しようとすると、UI が数秒間フリーズすることを意味します。私が書いた上記のコードは、これらの関数の一部です。UI がしばらくフリーズした後、残りは期待どおりに動作します。ただし、ラッシュアワー以外では、魅力的に機能します。

  3. 具体的には、 BufferedReader in = new BufferedReader(new InputStreamReader(conection .getInputStream())); それが問題の原因だと思います。誰でもそれを確認できますか?

4

2 に答える 2

1

SwingWorkerおそらく、サーバーへの呼び出しを行うためにスレッドを使用したいと思うでしょう。そうすれば、ビジー状態でも UI がフリーズしません。

ただし、新しいデータが到着するまで、新しいデータによって提供される結果の変更が画面に表示されないことを忘れないでください。

Oracle SwingWorker JavaDocsを参照してください

あなたに似た例のチュートリアル

于 2013-08-02T22:18:25.343 に答える