簡體   English   中英

Java:如何在另一個擴展Thread的類中調用方法,並且該方法是我的主類中的Thread Array的一部分?

[英]Java : How do I call a method in a different class that extends Thread and is a part of a Thread Array from my main class?

我有一個簡單的主類,它偵聽套接字,並在它們加入時將(網絡的)客戶端添加到線程數組中(例如服務器偵聽新的聊天客戶端,並將每個客戶端添加為線程,並維護線程列表)。線程作為數組)。

其他事情正在起作用,這些是服務器偵聽並向名為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

首先,一般建議:使用implements Runnable而不是extends Thread 將為您免去很多麻煩。

至於您的問題,您不能在作為參數傳遞給您的實例的Thread實例上調用sendMessage 您必須更改代碼以保存對ClientHandler的引用; 您實際上並不需要外部Thread實例的數組。 只需啟動它們,然后放開它們。

您還應該重新考慮自己啟動所有這些線程的選擇,這通常是一個壞主意,因為這會浪費系統資源。 但是,重新設計代碼的這一方面超出了您的問題范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM