2012-05-13 118 views
1

我仍然在學習鞦韆和套接字兩個,所以忍受着我。要了解我正在製作聊天客戶端/服務器系統。現在,我正在處理客戶端。我的班是爪哇 - 插座和鞦韆

  • 主要(與主法)code link
  • 窗口(設置Swing組件)code link
  • ActLis(處理從窗口中的所有組件動作聽衆)code link
  • 套接字管理器(管理我的套接字)code link

我成立了一個SocketManager對象Main當程序運行時,但是當ActLis需要使用套接字send a message我不知道的一個很好的方式,從Main得到它。我所做的完全無效,並且有更好的方法來設置它,或者有辦法從我的類中獲取我不知道的SocketManager對象嗎? (我知道有我的代碼中的其他問題,但我只是試圖讓插座爲開始工作,我有一個艱難的時間與他們)

+0

只要傳遞'SocketManager'對象到你的'ActLis'類 –

+0

@HunterMcMillen是的,但我該怎麼做?每次我嘗試我得到一個空指針,因爲我需要在** ActLis **中創建一個** Main **對象訪問** Main **的** SocketManager **對象我創建的** Main **對象與已經設置的** SocketManager **對象不同,因此它是空的。 – cgasser

+0

我發佈了以下幾種方法 –

回答

1

您有幾種選擇:

1)已經在主類ActLis對象,並通過主要的參考SocketManager它

public class Main 
{ 
    public static void main(String[] args) 
    { 
     ActList  a = new ActList(...); 
     SocketManager sm = new SocketManager(...); 

     a.sendMessageWithSocket(sm); //here you pass Main's reference to SocketManager 
    }        //object to the ActLis class for use 
} 

2)讓ActLis類具有對SocketManager objec參考T,在其構造

public class ActLis 
{ 
    private SocketManager sm; 

    public ActLis(SocketManager sm) 
    { 
     this.sm = sm; 
    } 
} 

這些設置可能是最簡單的方法來做到這一點。

0

增加獵人麥克米倫的:

3)使主類,單例。 id est不要讓它多於一個實例(如果我已經理解了你的目的,你不需要多於一個這個類的實例),所以只需要創建一個這個類的實例並保持它的引用爲它的公共靜態final字段。 (當然不要讓它從這個類的外部實例:

public class Main 
    { 
     public static final Main instance = new Main(/*args*/); 

     private Main(/*args*/) 
     { 
      //blah blah 
     } 
    } 

這樣你就可以在Main形式的任何地方,沒有問題訪問您的代碼的Socket