Java 为什么我的服务器/客户端聊天室程序会出现这些错误?

Java 为什么我的服务器/客户端聊天室程序会出现这些错误?,java,Java,我已经在这个程序上工作了几个小时了,所以我脑子都快死了,不知道为什么会出现这些错误。对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

我已经在这个程序上工作了几个小时了,所以我脑子都快死了,不知道为什么会出现这些错误。对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);
        }
    }   
}
import java.io.*;
导入java.net。*;
导入java.util.Scanner;
公共类服务器
{
公共静态void main(字符串[]args)引发异常
{
新建MyServer().start();
}   
}
类MyServer扩展线程
{
ServerSocket SS=新的ServerSocket(11200);
插座;
ClientManager CM=新的ClientManager();
公开募捐
{
while(true)
{
S=SS.accept();
CM.Add();
}
}
}
类MyClient扩展线程
{
MyClient客户端=新的MyClient(Socket,CM);
扫描器;
公开募捐
{
while(true)
{
S=新扫描仪(系统英寸);
客户。发送给所有客户;
}
}
公共无效发送(字符串S)
{
PrintWriter.println(S);
}       
}
类客户经理
{
MyClient[]X=新的MyClient[15];
int num=0;
公共同步作废添加(MyClient C)
{
X[num]=C;
num++;
C.开始();
}
公共同步的void SendToAllClient(字符串S)
{
int i;
对于(i=0;i

更新:我不确定在
CM.Add()中需要什么参数

我可以告诉您出现这些错误的原因。你需要了解它,然后根据需要进行更改

第27行-CM.Add()

在您的
ClientManager
类中,方法的签名是
public synchronized void Add(MyClient C)
,因此您可以看到,它需要一个参数,即类MyClient的对象,但是当您调用此方法时,您没有传递任何参数

MyClient=newmyclient(Socket,CM)

在这一行中,您试图创建类
MyClient
的对象,并传递两个参数Socket和CM对象,但在类MyClient中,您没有创建任何接受两个参数的构造函数,默认情况下只有default构造函数,它可以被称为
newmyclient()如果要传递参数,则需要自己创建参数化构造函数

Client.SendToAllClients

这里
Client
是类
MyClient
的对象,方法
SendToAllClients
存在于
ClientManager
类中,如果要调用此方法,则需要
ClientManager
类的对象,不能用
MyClient
的对象调用它



除此之外,我想告诉您,您没有遵循Java的命名约定。遵循命名约定是一个很好的实践,它可以帮助其他人轻松理解您的代码

27)
CM.add()
需要一个参数。34)
MyClient=newmyclient(Socket,CM)初始化应该在构造函数或方法中<代码>客户端。发送给所有客户端
42)MyClient(属于
Client
类型)没有方法
SendToAllClients
,该方法位于
ClientManager
中。48)无法创建
PrintWriter
的对象。到目前为止,我唯一能解决的问题是PrintWriter对象。我不确定要在CM.Add()和其他参数中放入什么参数,我只是不知道..我在
ClientManager
类中看到了
public synchronized void Add(MyClient C)
。当您在
MyServer
中使用该方法时,必须向其传递一个
MyClient
对象。由于您是这里的新用户,我想告诉您,如果有任何答案可以解决您的问题,那么您应该接受该答案,以便其他人知道什么对您有效。要接受答案,您只需单击答案左侧上下箭头下方的右勾号。谢谢您的帮助,但我想知道您是否可以给我提供更具体的信息。。我对Java非常陌生,大概70%的代码是由我的教授提供的。我几乎被告知要填空。我将参数C添加到CM.Add()中;但是我对构造器不够熟悉,不知道如何解决第二个问题。谢谢你抽出时间!