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 的事件调度线程。您希望改为在其他线程中显式执行所有耗时的任务。一种更简单的方法是使用 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 回答