-2

アプリケーションがフリーズするという問題が1つあります。new P2P("string");重量のあるGUIを使用する場合。

私の混乱は、このwhileループ内でそれを実行するための最良の方法は何ですか?OS全体をフリーズしないように?

ユースケースの例:

public void run() {
    while (true) {
      byte[] buf = new byte[5024];
      int bytes_read = 0;      
      bytes_read = sockInput.read(buf, 0, buf.length);
      String data = null;
      data = new String(buf, 0, bytes_read);
      System.out.println("[TCP]: incomeing data: " + bytes_read + " bytes, data=" + data);

      //
      // get some commands on TCP parse it and trigger this
      //
      new P2P(main.my_info_array);
      // After some time the whole OS freeze requires shutdown reboot physically
      // how to improve it

    }
  }
4

2 に答える 2

2

バックグラウンド スレッド (つまり、イベント ディスパッチ スレッド以外のスレッド) で実行時間の長いタスクを実行します。Swing はシングルスレッドであるため、これが必要です。詳細については、Swing での同時実行を参照してください。

于 2012-09-14T21:00:02.887 に答える
0

次の手順を実行してください。

1) OS (例: CentOS 5.5)、ハードウェア (例: 4-CPU 2.4GHz Pentium、2GB RAM) および JDK (例: Sun Java、32 ビット 1.6.0_21) をお知らせください。

2) 可能であれば、P2P ライブラリへのリンクとバージョン番号を指定します。

3) コードを変更して、ソケットを読み取って P2Pを 1 回だけ呼び出すようにします(つまり、ループをコメントアウトしてください)。

4) 別のターミナル ウィンドウで「top」を実行します。

5) プログラムを実行します。プログラムが突然大量のメモリや CPU を消費し始めていないか観察してください。凍結する前に「トップ」が最後に言うのは何ですか?

6) 見つけたことを報告する。

于 2012-09-14T23:47:16.710 に答える