누군가가이 prob로 나를 도울 수 있기를 바랬습니다. 두 개의 클라이언트 스레드가 깨어날 때까지 GUI JFrame이 구성 요소를 표시하지 않는 다중 스레드 서버 응용 프로그램이 있습니다. 각 클라이언트는 내부 클래스 ext 스레드로 작성된 스레드입니다.JFrame은 2 개의 스레드가 깨어날 때까지 구성 요소를 표시하지 않습니다.
하나의 클라이언트가 소켓 연결을 통해 조인되고 스트림이 설정되고 클라이언트 2가 조인 될 때까지 일시 중단됩니다. 클라이언트 스레드가 설정되고 스트림이 생성되면 클라이언트 1은 일시 중단 (false)으로 설정되고 두 클라이언트 스레드는 깨어납니다.
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
MorseCode_Server serverApp= new MorseCode_Server();
serverApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
serverApp.execute();
}
확실하지 내가이 추가, 그래서 여기에 관련된 어떤 코드 : 이 방법은 처음입니다 만 지금 JFrame의 디스플레이 구성 요소 ....
주요 방법은 또한 동부 서머 타임에 호출을한다 방법은 외부 클래스에서 호출하기 위해서는 각 클라이언트/플레이어를 위로 설정하고 2가 준비 될 때까지 첫 번째 스레드를 일시 중단 :
displayMessage("Execute Called(): ");
for (int i = 0; i < players.length; i++) {
try {
players[i] = new Player(socket.accept(), i);//assign soc & playerNumber
//clientIP[i] = //get IP address for message log
players[i].start();//JVM calls the threads run method
displayMessage("Execute(): Player " + players[i] + " socket created in execute (OUTER CLASS)");
//get IP address of playet[i]
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}//end for
//player 0 is suspended once socket created until player 1 is instantiated
//must retrun player 0 to resume state in synchronised block to allow one
//thread access at a time
synchronized (players[0]) {
players[0].setSuspended(false);
players[0].notifyAll();//wake up threads waiting on this object
displayMessage("Execute(): "+ players[0] + " players number notifyAll called in execute");
}//end synchronised block
이 각 클라이언트 스레드에 대한 내부 클래스의 생성자 :
나는 그것의 연결을 통해 clicent의 IP 주소를 얻을 때 16,private class Player extends Thread {
//instance varibles for each client/player
public Player(Socket accept, int i) {
connection = accept;
//clientIP[i] = connection.getRemoteSocketAddress().toString();
playerNumber = i;
displayMessage("Player " + playerNumber + " costructor thread inner class called");
//open socket streams for communication
try {
//objectouptstream obj wraps the low level code from getOutputStream method
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();
input = new ObjectInputStream(connection.getInputStream());
displayMessage("Player " + playerNumber + " output/input streams set up in Player inner class..END CONSTRUCTOR PLAYER");
} catch (IOException e) {
e.printStackTrace();
}
}//end constructor inner class Player
또한 :
clientIP[i] = connection.getRemoteSocketAddress().toString();
나는 널 포인터 예외를 얻을! 사전에 건배 C
여기서'clientIP [i] = ...'명령은 무엇입니까? –
이제 플레이어 생성자에 있습니다. 이제 정렬 된 것입니다. 그냥 문자열 배열을 intilised하지 않았습니다. – dancingbush