2016-05-25 7 views
0
public static void main(String[] args) { 
    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7); 
    Observable.from(list) 
      .map(new Func1<Integer, String>() { 
       @Override 
       public String call(Integer integer) { 
        return String.format("%d ",integer); 
       } 
      }).subscribeOn(Schedulers.newThread()) 
      .observeOn(Schedulers.newThread()) 
      .subscribe(new Action1<String>() { 
       @Override 
       public void call(String s) { 
        System.out.print(s); 
       } 
      }); 
} 

Hier ist ein Test, wenn ich rxjava benutze. es gibt nichts aus. Ich weiß nicht warum. Jemand kann mir helfen? Vielen Dank.über Schedulers.newThread()

+1

Ihre Hauptmethode wird zurückgegeben, bevor der Beobachtercode ausgeführt wird. Um das zu beheben, können Sie .toBlocking() vor .subscribe (Action1) hinzufügen –

+0

vielen Dank Ich habe den Grund meines Problems (die Hauptmethode ist fertig) – duwei

Antwort

3

RxJava-Standard-Scheduler sind Daemon-Threads. Wenn Ihre main()-Methode beendet wird, wird die JVM beendet und diese Daemon-Threads werden gestoppt.

Platzieren Sie eine Thread.sleep(5000) am Ende der main() Methode, und Sie sehen die Ausgabe gedruckt. Alternativ wenden Sie .toBlocking() vor Ihrem .subscribe() Anruf an.