我已经在这个程序上工作了几个小时,所以我已经脑子里死了,无法弄清楚为什么我会收到这些错误。对于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();
答案 0 :(得分:1)
我可以告诉你为什么会收到这些错误。您需要了解它,然后根据您的需要进行更改。
Line 27 - CM.Add();
在你的ClientManager
类中,方法的签名是public synchronized void Add(MyClient C)
所以你可以看到,它需要一个参数,即类MyClient的对象,但是当你调用这个方法时,你没有传递任何参数
MyClient Client = new MyClient(Socket, CM);
在这一行中你试图创建类MyClient
的对象并传递两个参数Socket和CM对象但是在你的类MyClient中你没有创建任何这样的构造函数,它将接受两个参数,默认情况下会有只有默认构造函数,如果要传递参数,可以调用类似new MyClient();
的构造函数,然后需要创建自己的参数化构造函数。
Client.SendToAllClients(S);
此处Client
是类MyClient
的对象,方法SendToAllClients(s)
出现在ClientManager
类中,如果要调用此方法,则需要一个对象ClientManager
类,您无法使用MyClient
的对象调用它。
除了它,我想告诉你,你没有遵循Java的命名约定。遵循命名约定是一种很好的做法,它可以帮助其他人轻松理解您的代码。 Check this link