1

私はJavaとチャットプログラムを作成しており、TCPとシリアル化可能なオブジェクトを介して通信を行っています。チャットでもファイルを交換できますが、ファイルが大きすぎる場合(ビデオファイル)、ファイルの読み込みとオブジェクトの送信プロセスが完了するまでインターフェイスがフリーズします。ファイルの読み込み中にメッセージを表示する必要があります。これは私のコードです:

File file = jFileChooser1.getSelectedFile();
String name= fichero.getName();
int size = (int)fichero.length();
byte[] byteArray = new byte[size];
try {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    bis.read(byteArray);               
} catch (IOException ex) {
    Logger.getLogger(Explorador.class.getName()).log(Level.SEVERE, null, ex);
}

この行「bis.read(byteArray);」の間にメッセージを表示する必要があります。行がインターフェイスがフリーズする理由であると私が信じているので、読んでいます。byteArrayがロードされた後、それをオブジェクトに配置し、ソケット接続を介して送信します。

また、サーバー上でビデオファイルを開き、接続されたクライアントに分割して送信して再生するためだけに、ライブではなくビデオストリーミングが必要です。誰かが私にチュートリアルやヒントを教えてもらえますか?ありがとう。

4

3 に答える 3

2

そのUIのフリーズは、Swingのイベントディスパッチスレッドをブロックしていることを示しています。代わりに、時間のかかるすべてのタスクを他のスレッドで明示的に実行する必要があります。より簡単な方法の1つは、SwingWorkerを使用することです。

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

于 2013-02-27T18:28:44.037 に答える
1

コードをスレッドに入れて、完了するのを待つメソッドをコーディングできます。

new Thread(new Runnable() {

        @Override
        public void run() {
             //Code here
        }
    }).start();
于 2013-02-27T18:29:21.610 に答える
0

スレッドでタスクを実行できます。

new Thread(new Runnable() {

        @Override
        public void run() {
             //Code here
        }
    }).start();

そして、runlater()を使用してビューを更新します。

于 2013-02-27T18:38:28.873 に答える