我有一个简单的主类,它可以监听套接字,并在加入时将(网络)客户端添加到一个Thread数组中(比如服务器正在侦听新的聊天客户端,并将每个客户端添加为一个线程,并维护作为数组的线程列表。)
其他工作正常,这些是服务器侦听的代码行,并将新客户端添加到名为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
答案 0 :(得分:4)
首先,一般建议:使用implements Runnable
代替extends Thread
。将为您节省很多麻烦。
至于你的问题,你不能在作为参数传递你的实例的sendMessage
实例上调用Thread
。您必须更改代码才能保留对ClientHandler
的引用;你真的不需要外部Thread
实例的数组。只需启动它们就可以了解它们。
您还应该重新考虑自己选择启动所有这些线程,这通常是一个坏主意,因为它会浪费系统资源。但是,重新设计代码的这一方面超出了您的问题的范围。