繁体   English   中英

为什么在服务器/客户端聊天室程序中出现这些错误?

[英]Why am I getting these errors in my Server/Client Chatroom program?

我已经在这个程序上工作了几个小时,所以我很脑筋急转弯,无法弄清楚为什么会出现这些错误。 对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);

这是Server类的完整代码。 客户端类工作完美。

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();需要输入什么参数CM.Add();

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

Line 27 - CM.Add();

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

MyClient Client = new MyClient(Socket, CM);

在此行中,您尝试创建类MyClient对象并传递两个参数Socket和CM对象,但是在类MyClient中,您尚未创建任何将接受两个参数的此类构造函数,默认情况下将只有默认构造函数,可以调用了诸如new MyClient();类的东西new MyClient(); 如果要传递参数,则需要创建自己的参数化构造函数。

Client.SendToAllClients(S);

这里Client是类MyClient对象,并且ClientManager类中存在方法SendToAllClients(s) ,如果您要调用此方法,则需要ClientManager类的对象,则不能与MyClient的对象一起调用它。


除此以外,我想告诉您,您没有遵循Java的命名约定。 遵循命名约定是一个好习惯,它可以帮助其他人轻松理解您的代码。 检查此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM