2013-02-27 4 views
1

Я делаю чат-программу с Java, и я делаю связь через TCP и сериализуемые объекты. Чат также может обмениваться файлами, но когда файлы слишком большие (видеофайлы), интерфейс зависает, пока не завершит загрузку файла и процесс передачи объекта. Мне нужно показать сообщение, пока файл загружается. Это мой код:Выполнение действия при чтении больших файлов java

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

Какое сообщение? – APerson

ответ

2

Это зависание UI указывает на то, что вы блокируете Swing's Dispatch Thread. Вы хотите выполнять все трудоемкие задачи явно в других потоках. Один более простой способ - использовать SwingWorker.

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

+0

Спасибо всем, я не думал использовать нить, я исправил ее таким образом. – VictorVZ

1

Вы можете поместить свой код в тему и код метода ждет его завершения.

new Thread(new Runnable() { 

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

Вы можете выполнять свои задачи в теме:

new Thread(new Runnable() { 

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

И использовать runlater(), чтобы обновить вид.

Смежные вопросы