2014-09-24 2 views
1

저는 지금이 프로그램을 몇 시간 동안 해왔습니다. 그래서 저는 뇌가 죽어서 왜 이런 오류가 발생하는지 알 수 없습니다. Java 프로그래밍에 익숙하지 않아도 제 경우에는 많은 도움이되지 않습니다.내 서버/클라이언트 대화방 프로그램에서 이러한 오류가 발생하는 이유는 무엇입니까?

On line 27 - "error: method Add in class ClientManager cannot be applied to given types;" 
On line 34 - "error: cannot find symbol" 
Also line 34 - "error: cannot find symbol" 
On line 42 - "error: cannot find symbol" 

지금 여기 특정 라인에 대한 내 코드의 세그먼트입니다

Line 27 - CM.Add(); 
Line 34 - MyClient Client = new MyClient(Socket, CM); 
Line 42 - Client.SendToAllClients(S); 

여기 서버 클래스에 대한 내 전체 코드입니다. 클라이언트 클래스는 완벽하게 작동합니다.

import java.io.*; 
import java.net.*; 
import java.util.Scanner; 

public class Server 
{ 

    public static void main(String[] args) throws Exception 
    { 
     new MyServer().start(); 
    } 
} 

class MyServer extends Thread 
{ 
    ServerSocket SS = new ServerSocket(11200); 
    Socket S; 
    ClientManager CM = new ClientManager(); 

    public void run() 
    { 
     while(true) 
     { 
      S = SS.accept(); 
      CM.Add(); 
     } 
    } 
} 

class MyClient extends Thread 
{ 
    MyClient Client = new MyClient(Socket, CM); 
    Scanner S; 

    public void run() 
    { 
     while(true) 
     { 
      S = new Scanner(System.in); 
      Client.SendToAllClients(S); 
     } 
    } 

    public void Send(String S) 
    { 
     PrintWriter.println(S); 
    }  
} 

class ClientManager 
{ 
    MyClient[] X = new MyClient[15]; 
    int num = 0; 

    public synchronized void Add(MyClient C) 
    { 
     X[num] = C; 
     num++; 
     C.start(); 
    } 

    public synchronized void SendToAllClient(String S) 
    { 
     int i; 
     for(i = 0;i < num;i++); 
     { 
      X[i].Send(S); 
     } 
    } 
} 

업데이트 : 내가 당신에게 당신이 이러한 오류를 얻고있는 이유를 알 수 CM.Add();

+0

27)'CM.add()'에는 매개 변수가 필요합니다. 34)'MyClient Client = new MyClient (Socket, CM);'초기화는 생성자 또는 메소드에 있어야합니다. 'Client.SendToAllClients (S); 42) MyClient (타입'Client')는'SendToAllClients' 메소드를 가지고 있지 않습니다. 그 메소드는'ClientManager'에 있습니다. 48)'PrintWriter'의 객체를 만들지 못했습니다. – csmckelvey

+0

지금까지 해결할 수 있었던 유일한 문제는 PrintWriter 개체입니다. 나는 어떤 매개 변수를 CM.Add()와 다른 것에 넣을 지 모르겠다. 나는 단지 모른다. .. – Sean

+0

'ClientManager' 클래스에서'public synchronized void Add (MyClient C)'를 본다. 이 메소드를'MyServer'에서 사용할 때는 반드시'MyClient' 객체를 넘겨 주어야합니다. – csmckelvey

답변

1

에 갈 필요 어떤 매개 변수 모르겠어요. 그것을 이해하고 필요한 것에 따라 변경해야합니다. 당신의 ClientManager 클래스에서

Line 27 - CM.Add();

, 방법의 서명은 클래스하여 MyClient의 하나 개의 매개 변수 즉, 객체를 필요로하지만,이 메소드를 호출 할 때 당신은 어떤 매개 변수를 전달하지 않는, public synchronized void Add(MyClient C) 그래서 당신이 볼 수 있습니다. 이 라인에서

MyClient Client = new MyClient(Socket, CM);

당신은 클래스 MyClient의 개체를 만들려고 거기에 기본적으로 두 개의 매개 변수를 받아 이러한 생성자를 작성하지 않은하여 MyClient 두 개의 인수 소켓 및 CM 객체하지만 클래스를 전달하는 기본값이이고, 매개 변수를 전달하려는 경우 new MyClient();과 같은 것으로 호출 될 수 있습니다. 그러면 매개 변수화 된 생성자를 생성해야합니다. 당신이이 메소드를 호출 할 경우 다음

Client.SendToAllClients(S);

Client 클래스 MyClient의 객체와 SendToAllClients(s)ClientManager 클래스에 존재하는 방법입니다, 당신은 당신이 ClientManager 클래스의 객체가 필요, 당신은 객체를 호출 할 수 없습니다 MyClient입니다.


나는 당신에게 자바의 명명 규칙을 따르지 않고있다. 명명 규칙을 따르는 것이 좋습니다. 다른 사람들이 코드를 쉽게 이해할 수 있도록 도와줍니다. Check this link

+0

도움을 주셔서 감사합니다. 그러나 더 구체적인 정보를 제공해 줄 수 있는지 궁금합니다. 저는 Java에 익숙하지 않았으며이 코드의 70 %는 교수님이 제공 한 것 같습니다. 나는 공백을 채우기 위해 꽤 많이 들었다. CM.Add()에 매개 변수 C를 추가했습니다. 하지만 제 두 번째 문제를 해결하기 위해 정확히 무엇을해야 하는지를 아는 생성자들에게는 익숙하지 않습니다. 시간 내 주셔서 감사합니다! – Sean

관련 문제