2011-12-26 4 views
1

메신저 애플리케이션 용 서버를 만들고, 사용자를 수락하기위한 스레드를 만들었습니다.스레드 메소드가 실행되지 않는 것 같습니다. (run() 메소드를 오버라이드)

하지만 내 오버라이드 메소드 실행()

이 나에게 오류 또는 그냥 실행되지 않습니다 제공하지 않습니다 오지 않는 것 같다.

이 클라이언트 리스너 여기

package org.walking.server.listener; 

import java.io.IOException; 
import java.net.ServerSocket; 

import javax.swing.SwingWorker; 
/* 
* Walking client listener! 
*/ 
public class WalkingCL { 
private SwingWorker work; 


ServerSocket server; 
public boolean listening = true; 

public void acceptclient(){ 
    try { 
     System.out.println("Created server socket"); 

     server = new ServerSocket(4444); 
    } catch (IOException e) { 
     System.err.println("Error while creating ServerSocket on port 4444"); 


     e.printStackTrace(); 
    } 
work = new SwingWorker<Object,Void>(){ 
    public Object doInBackground(){ 

     while(listening){ 
      try { 
       new WalkingCLT(server.accept()).start(); 
      } catch (IOException e) { 
       System.err.println("Error while making thread!"); 
       e.printStackTrace(); 
      } 
     } 

     return listening; 

    } 
    }; 
} 
} 

클라이언트 수신기 스레드입니다 : 여기

코드입니다

package org.walking.server.listener; 

import java.io.BufferedReader; 
import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.Socket; 
/* 
* Walking Client listener Thread! 
*/ 
public class WalkingCLT extends Thread { 
private Socket client; 

public WalkingCLT(Socket client){ 
    super("Walking client listener thread!"); 

    this.client = client; 

} 
@Override 
public void run(){ 
    System.out.println("HELLO?"); 
    try { 
     System.out.println("User:" + client.getInetAddress() + "connected!"); 

     PrintWriter out = new PrintWriter(client.getOutputStream(),true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 


     out.println("HELLO?"); 
     out.flush(); 



     out.close(); 
     in.close(); 
     client.close(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 

내가 있는지 확인하기 위해 몇 가지에 println 문에서도 넣어했습니다가 그것에 온다 그러나 나는 단지 이것을 본다 : 서버 stacktrace :

만든 서버 소켓

클라이언트 스택 트레이스 :

패널을 작성! 연결되었습니다!

희망을 보내 주시면 감사하겠습니다.

감사합니다.

답변

1

SwingWorker 작업의 인스턴스 만 만듭니다. work.execute() 또는 work.doInBackground()에 대한 호출이 일부 도우미 클래스에 의해 누락되었습니다. ExecutorService를보고이를 submit and execute SwingWorker tasks에 사용하는 방법에 대해 알아볼 필요가 있습니다. Future documentation에는 작은 코드 스 니펫도 있습니다.

+0

대단히 감사합니다. 이 사이트를 사랑해! –

관련 문제