2013-02-27 1 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의 이벤트 발송 스레드를 차단하고 있음을 나타냅니다. 시간 소모적 인 작업을 다른 스레드에서 명시 적으로 수행하려고합니다. 한 가지 더 간단한 방법은 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(); 

을 그리고 당신의보기를 업데이트 할 runlater()를 사용 :

new Thread(new Runnable() { 

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

당신은 스레드에서 작업을 수행 할 수 있습니다.