2011-09-12 4 views
1

「目標」値はどのように取得/設定できますか?どうすれば私のスレッドからサードパーティのAPIスレッドに値を渡し、サードパーティのスレッドからJavaの静的変数に値を変更するのですか?

  • 他のクラスやスレッドからも使用できますか?私はこれを試しましたが、私には "5"の目標を示す代わりに常にヌルを与えるか何も与えません。

Main.java:

public class Main 
{ 
    public static String goal = null; 
    public static void main(String[] args) 
    { 
    System.out.println(goal); // shows: null 
    MyFunction1(); 
    System.out.println(goal); // How many goals happend till now? 
    } 

    public static void MyFunction1() 
    { 
    new Thread(new Runnable() 
    { 
     public void run() 
     { 
     CallMe(); 
     System.out.println("show me: " + goal); // shows nothing. 
     } 
    }).start(); 
    } 

    public static void CallMe() 
    { 
     ThirdpartySoftware.Bla().connect(new Bla.STATE() 
     { 
     public void stateChanged() 
     {   
      System.out.println("Am i running? yes");  
      goal = "5"; 
      System.out.println("Did i assigned new value to goal? yes"); 
     } 
     });  
    } 

} 

注:私は今、別途イベント>抽象インタフェースとして新しいスレッドを発射し、しようとしていますが>スレッドとしてそのインターフェイスを実装し、そのスレッドから変数への割り当てメインクラス静的変数。そして、仮想スレッドでリッスンします。したがって、合計で私は持っている可能性があります: メイン>スレッド1> ThirdpartyThred>抽象インターフェイス>スレッド2>メインput/get

+0

コールバックメソッドを呼び出す問題は、あなたがその現在の値を表示したくないということです、あなたはそれが設定されるまで待機します。この最も簡単な解決策は、これを行うことではなく、値が設定された後に実行したいコードを、値が設定されているコードの後ろに、他にはどこにも置かないようにすることです。これは、イベント駆動コールバックのためのものです。 –

+0

以下のような完全な方法でコールバックインターフェイスを定義します。 http://stackoverflow.com/questions/826212/java-executors-how-to-be-notified-without-blocking-when-a-task-completes – sfk

答えて

0

スレッド(またはRunnableを)内の引数

などの任意のオブジェクトを受け取り、完全な方法スレッドを開始したクラスへの参照のクラスパスとのコールバックインターフェースを定義します。スレッドの操作が完了すると、

Java executors: how to be notified, without blocking, when a task completes?

+0

私のリスナーは決して終わらないので(ウェブカムサードパーティのライセンスを受けたSDK)、助けにならない。私は他のスレッド/クラスからアクセスするために、私はグローバルな状態を持つことができるように、それから飛び出す必要があります。あなたの助言はまだ助けていません。 – YumYumYum

0

サードパーティに接続し、リスナーを追加します。 出力を確認します。

ただし、リスナーのみを追加しました。後で状態が変わるときに目標を設定する必要がありますが、connectメソッド自体がそれを変更するとは言いません。

+0

私はそれを実行する私は接続メソッドが正常に実行される参照してください。そして、私の目標は、メソッドを接続する5を示します。しかし、他のクラス/スレッドから私は常にnullまたは何も接続メソッドを除いて、目標の最終結果を参照してください。 – YumYumYum

関連する問題