我正在用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之后,我把它放在一个对象上并通过套接字连接发送它。
我还需要一个视频流,而不是直播,只是为了在服务器上打开一个视频文件并将其分片发送给连接的客户端并进行播放。任何人都可以给我教程或提示吗?感谢。
答案 0 :(得分:2)
UI冻结表明您正在阻止Swing的事件调度线程。您希望在其他线程中显式执行所有耗时的任务。一种更简单的方法是使用SwingWorker。
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
答案 1 :(得分:1)
您可以将代码放在一个Thread中,然后编写一个等待它完成的方法。
new Thread(new Runnable() {
@Override
public void run() {
//Code here
}
}).start();
答案 2 :(得分:0)
您可以在线程中执行任务:
new Thread(new Runnable() {
@Override
public void run() {
//Code here
}
}).start();
并使用runlater()更新您的视图。