2012-09-13 7 views
1

내 대화방 프로그램. 나는 2 개의 패키지를 가지고 있는데, 하나는 클라이언트 &이고 다른 하나는 Server이다. 서버 프로그램을 실행하고 PortField를 채운 다음 서버 시작 버튼을 클릭합니다. 창 프로그램이 멈췄습니다. 아무 것도 할 수 없지만 서버는 여전히 작동합니다. 클라이언트는 여전히 연결되어 채팅합니다.채팅 서버 - 클라이언트/서버 채팅 Java 숙제

private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {           

    int port = Integer.parseInt(txtPort.getText()); 
    go(port); 
}          
private void go(int port){ 
    try { 
     listUser = new Hashtable<String, ClientConnect>(); 
     server = new ServerSocket(port); 
     txaStatus.append("Server is started\n"); 
     txaStatus.append("IP Server : "+InetAddress.getLocalHost().getHostAddress()+"\n"); 
     txaStatus.append("Port : " + port + "\n"); 
     while(true){ 
      client = server.accept(); 
      new ClientConnect(this,client);//class ClientConnect for DataOutPut & DataInput Client <=> Server 
     } 
    } catch (IOException e) { 
     txaStatus.append("Server cannot start\n"); 
        JOptionPane.showMessageDialog(this,"Port busy","warning",JOptionPane.WARNING_MESSAGE); 
        System.exit(0); 
    } 
} 
+0

무엇이 문제입니까? –

+0

@Mouny 문제가 뭐죠? 다행스럽게도 숙제를하고 있습니다. – mtk

+0

동시에 'X 국가'와 'Y 국가'에 가야한다고 들으면 어떻게 할 것입니까? ;) – noMAD

답변

3

GUI 스레드에서 서버를 실행할 수 없으므로 프로그램이 다른 입력을 허용하지 않습니다. go() 메서드를 별도의 스레드로 옮겨야합니다.

+0

GUI 스레드에서 서버를 실행하려고하면 해당 스레드는 클라이언트 네트워크 메시지를 기다리고 받아들이는 루프를 종료 할 때까지 GUI 업데이트로 돌아갈 수 없습니다. 두 개의 스레드가 필요하므로 한 번에 두 가지 작업을 효과적으로 수행하고 클라이언트를 처리하며 GUI를 최신 상태로 유지할 수 있습니다. –

+0

대단히 감사합니다. 나는 2 개의 실로 해결했다. 자바 초보자 : D –

0

이 과제의 성격을 고려할 때 이미 멀티 스레딩을 도입했다고 가정하는 것이 안전하다고 할 수 있습니다. 이것은 그 중 일부를 시도하는 좋은 시간 같아 보입니다.