2012-05-13 8 views
1

私はまだスイングとソケットの両方を学んでいるので、私と一緒にいてください。私はチャットクライアント/サーバーシステムを作っています。今、私はクライアントに取り組んでいます。私のクラスは、(Swingコンポーネントを設定します)ウィンドウcode link Java - ソケットとスイング

  • ActLis(Windowからすべてのコンポーネントのアクションリスナーを処理します)code link
    • (mainメソッド付き)メインcode link
    • です
    • SocketManager(私のソケットを管理する)code link

    プログラムが実行されるとき、私はMainSocketManagerオブジェクトを設定しますが、ActLissend a messageにそのソケットを使用する必要があるとき、私はMainからそれを得るための良い方法を知りません。私が完全に無効にしていること、それをセットアップするための良い方法があるのか​​、私の知らないMainクラスのSocketManagerオブジェクトを取得する方法がありますか? (私は自分のコード内の他の問題がある実現が、私はちょうど私が彼らと苦労を抱えている、ソケットがスタートのために働くために取得しようとしている。)

    +0

    だけ渡します。 'ActLis'クラスへの' SocketManager'オブジェクトを作成します –

    +0

    @HunterMcMillenはい、それはどうしますか?** ActLisで** Main **オブジェクトを作成する必要があるため、nullポインタを取得しようとするたびに** Main **の** SocketManager **オブジェクトにアクセスする** Main **オブジェクトは同じものではありません** SocketManager **オブジェクトはnullに設定されています – cgasser

    +0

    悪い点は以下の通りです –

    答えて

    1

    あなたは、いくつかのオプションがあります。

    1)メインクラスでActLisオブジェクトを持っており、それ

    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にSocketManagerにメインの参照を渡す)ActLisクラスはSocketManager OBJECへの参照を持ってみましょうそのコンストラクタ

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

    これらに設定されたtが、おそらくこれを行うための最も簡単な方法です。

    0

    ハンターマクミランさんへの追加:

    3)は、メインクラス、シングルトンを作成します。あなたが目的を理解していれば、このクラスのインスタンスは2つ以上必要はありません)。このクラスのインスタンスを1つ作成し、そのクラスの参照をaその中のpublic static finalフィールド。 (もちろんそれは、このクラスの外からインスタンス化させてはいけない:

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

    あなたは何の問題もなくどこでも、あなたのコード内のMain形であなたのSocketフィールドにアクセスすることができますこの方法では