2017-10-30 9 views
0

私はRxJavaを学び、それは非常に便利だと思っていますが、自分でコードをテストし始めたら、正しく動作しません。RxJavaのシンプルなデモが動作しない

私はこのようなコードを書いていますが、何も印刷しません。プログラムは開始直後に停止します。

public static void main(String[] args) { 
     Observable.just(1, 2, 3, 4) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(Schedulers.newThread()) 
     .subscribe(new Action1<Integer>() { 
      @Override 
      public void call(Integer number) { 
       System.out.println(number); 
      } 
     }); 
    } 

また、私はそれがメインスレッドでのみ動作することがわかります。 このコードは、私がrxjava 1.3.0を使用していると私は、このコードを書い数

public static void main(String[] args) { 
     Observable.just(1, 2, 3, 4) 
     .subscribeOn(Schedulers.immediate()) 
     .observeOn(Schedulers.immediate()) 
     .subscribe(new Action1<Integer>() { 
      @Override 
      public void call(Integer number) { 
       System.out.println(number); 
      } 
     }); 
    } 

を印刷します記事からの指示に従ってください。

私に何か不足しましたか?

(私は今それを理解rxjavaはすぐに新しいスレッドを作成しませんように、それが見えていますので、rxjavaは、新しいスレッドを作成することができます前に、メインスレッドが終了され、JVMがシャットダウンされます。

以前のようにするには例の仕事は、ただ生きて長いメインスレッドを作る。

Observable.just(1, 2, 3, 4) 
     .subscribeOn(Schedulers.newThread()) // 
     .observeOn(Schedulers.newThread()) // 
     .subscribe(new Action1<Integer>() { 
      @Override 
      public void call(Integer number) { 
       System.out.println(number); 
      } 
     }); 


     try { 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

+0

それは私のためによく見えます。あなたは 'subscribeOn'と' observeOn'なしでそれを試すことができますか? –

+0

これはsubscribeOnとobserveOnなしで動作しますが、それは2番目のものと同じでした。どうすれば別のスレッドで実行できますか? – BlackCat

+1

observableはブロックされません(subscribeOnで実行されます)。したがって、メインメソッドは終了し、JVMはシャットダウンします。最後にブロック操作を使用する必要があります。ブロッキングのgetまたはblocking subscribeメソッドを使用します。参照:https://stackoverflow.com/questions/46991778/connectableobservable-not-emitting-values –

答えて

0

を使用Observable.toBlocking().subscribe()代わりObservable.subscribe()の。

Observableで購読したら、メインスレッドが終了します。 rxワーカーはデフォルトでデーモンスレッドですが、JVMは終了します。だからあなたがする必要があるのは、メインスレッドがSubscriptionの完了を待つようにすることです。

関連する問題