0

我有一个简单的主类,它在套接字上侦听,并在它们加入时将(联网)客户端添加到线程数组中(例如服务器侦听新的聊天客户端,并将每个客户端添加为线程,并维护列表线程作为数组)。

其他工作正常,这些是服务器侦听并将新客户端添加到称为 thdRunningClientsPool[] 的线程数组的代码行

//add a new ClientHandler type object( ClientHandler class extends Thread) to my Thread Array
public void run() {
............
 thdRunningClientsPool[intRunningClients]= new 
                   Thread( new ClientHandler(clientSocket));
 thdRunningClientsPool[intRunningClients].start();

现在,ClientHandler 类有一个方法 void SendMessage(string Message)

添加新客户端后,如何使用此 SendMessage 方法发送消息?当我使用这个

thdRunningClientsPool[intRunningClients].SendMessage("hi");

未找到 SendMessage 方法。Java 将 thdRunningClientsPool(intRunningClients) 视为线程,而不是 ClientHandler 类的对象,因此我无法访问我的 SendMessage 方法。

我怎样才能解决这个问题?任何建议都非常感谢:) THxxx

4

1 回答 1

4

首先,一般建议:使用implements Runnable而不是extends Thread. 将为您省去很多麻烦。

至于您的问题,您不能调用作为参数传递给您sendMessageThread实例的实例。您必须更改代码以保存对您ClientHandler的 s 的引用;你真的不需要外部Thread实例的数组。只需启动它们并放开它们。

您还应该重新考虑自己启动所有这些线程的选择,这通常是一个坏主意,因为它会浪费系统资源。但是,重新设计代码的这方面超出了您的问题范围。

于 2013-01-28T13:24:36.537 回答