线程“ main”中的异常java.lang.NullPointerException在Reactor.core.publisher.FluxFilter $ FilterSubscriber.onNext

时间:2019-11-24 14:09:46

标签: java reactor

在filter方法之后,subscribe方法似乎提供了一个nullpointerexception。当我删除过滤器方法时,一切工作正常。为什么?

        Flux<String> flux = new Flux<String>() {
            @Override
            public void subscribe(CoreSubscriber<? super String> coreSubscriber) {
                coreSubscriber.onNext("Test 7");
                coreSubscriber.onNext("test 6"); //line 33
                coreSubscriber.onNext("test 5");
                coreSubscriber.onNext("test 4");
                coreSubscriber.onNext("test 3");
                coreSubscriber.onNext("test 2");
                coreSubscriber.onNext("test 1");
                coreSubscriber.onComplete();
            }
        };

        flux
            .filter((s) -> s.contains("7"))
            .subscribe(System.out::println); //line 45

我收到以下错误:

Exception in thread "main" java.lang.NullPointerException
    at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:100)
    at com.douma.reactor.App$1.subscribe(App.java:33)
    at reactor.core.publisher.FluxFilter.subscribe(FluxFilter.java:52)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6873)
    at reactor.core.publisher.Flux.subscribeWith(Flux.java:7040)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6866)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6830)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6773)
    at com.douma.reactor.App.test2(App.java:45)
    at com.douma.reactor.App.main(App.java:24)

1 个答案:

答案 0 :(得分:0)

您正在Flux方法内设置subscribe容器的初始值。调用filter时,初始值仍为null,因此contains引发异常。将此添加到您的代码中:

    flux.startWith("starter string")
        .filter((s) -> s.contains("7") || s.contains("starter"))
        .subscribe(System.out::println); // Prints out "starter string" and "Test 7"