0

Javaでオブジェクトの同じインスタンスを使用する簡単な方法があるのだろうか.

シリアル経由で通信するために使用されるMySerialクラスがあります (RXTX ライブラリを使用していますが、問題には関係ありません)。

次のように仮定します。

  • 「接続」ボタンのある GUI があり、クリックすると MySerial オブジェクトがインスタンス化され、シリアル ポートに接続されます。
  • 2 秒ごとにシリアル経由でメッセージを送信する Thread によって駆動される Performer クラスがあります (接続が利用可能な場合)。

MySerialGUI で使用されるのと同じインスタンスが、Performerクラスで使用されるものと同じであることを望みます。問題はPerformer、GUI がお互いを認識していないことです。これらは 2 つの別個のプログラムのように見えるためMySerial、コンストラクターに渡すことはできません。

SingleTon と ClassLoader を使ってみましたが、どれもうまくいきませんでした。

何かアドバイス?

4

3 に答える 3

2

Singleton パターンで問題は解決しますが、頻繁に使用する必要はありません (絶対に避けてください)。オブジェクトへの参照を単純に送信してみませんか? 難しすぎる場合は、アーキテクチャに問題がある可能性があります。アーキテクチャを修正してください - シングルトン パターンの問題を回避しないでください。

于 2012-05-02T22:14:41.473 に答える
0

シングルトンパターンが必要なもののようです。実装はかなり簡単で、問題が発生することはありません(説明内容によると)例:

public class MySingleton {

    private static MySingleton instance;

    private MySingleton() {}

    public static MySingleton getInstance() {
        if (instance == null)
            instance = new MySingleton();
        return instance;
    }

    private String s = "hello";
    public String getString() {
        return s;
    }

}

GUI /パフォーマーから:

String someString = MySingleton.getInstance().getString();
于 2012-05-02T22:02:26.810 に答える
0

各インスタンスが独自にある場合JVM( Windowsjava.exeタスクマネージャーに1つ)、の同じインスタンスを共有することはできませんMySerial同じプロセスで2つのアプリケーションを初期化する必要があります。あなたはoを使うことができます。enumSingleton

public class Main {
    enum MySerial { ... }
    public static void main(String... args) {
       Performer.main(args);
       GUI.main(args);
    }
}
于 2012-05-02T22:32:09.987 に答える