Spring Boot 和 RxJava2 集成 - NullPointerException:实际上不是
Spring Boot and RxJava2 Integration - NullPointerException: Actually not
尝试从 Spring Boot ApplicationRunner 调用 RxJava2,我得到一个非常神秘的异常:
java.lang.IllegalStateException: Failed to execute ApplicationRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:770)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:757)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at com.silanis.ps.dtool.Application.main(Application.java:37)
Caused by: java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
at io.reactivex.Flowable.subscribe(Flowable.java:12995)
at io.reactivex.Flowable.subscribe(Flowable.java:12932)
at io.reactivex.internal.operators.flowable.FlowableZip$ZipCoordinator.subscribe(FlowableZip.java:127)
at io.reactivex.internal.operators.flowable.FlowableZip.subscribeActual(FlowableZip.java:79)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableTake.subscribeActual(FlowableTake.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableFlatMapSingle.subscribeActual(FlowableFlatMapSingle.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.Flowable.subscribe(Flowable.java:12935)
at com.silanis.ps.dtool.services.CliRunner.run(CliRunner.java:61)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)
... 5 common frames omitted
Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
at io.reactivex.internal.schedulers.ComputationScheduler.schedulePeriodicallyDirect(ComputationScheduler.java:139)
at io.reactivex.internal.operators.flowable.FlowableInterval.subscribeActual(FlowableInterval.java:46)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
... 20 common frames omitted
java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
究竟是什么意思?
与
有关的事情
Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
答案:
正如关于这个问题的评论中提到的,当 Flowable.interval
被初始化为 0
时会抛出这个错误。将值设置为正值解决了问题。
Caused by: java.lang.IllegalArgumentException: null
这不是一个非常有用的异常,但根据源代码,似乎在 period <= 0
时发生了异常。
由于您简化了代码,所以不清楚该值可能出现在哪里,但是当提供给 Flowable.interval
的句点为 0 或负数时,似乎会发生此错误。出于某种原因,RxJava 接受了 ThreadPoolExecutor 不接受的 0
周期。
编辑:当 RxJava 2.1.1 发布时,这个错误将被修复,如果 period <= 0
.
尝试从 Spring Boot ApplicationRunner 调用 RxJava2,我得到一个非常神秘的异常:
java.lang.IllegalStateException: Failed to execute ApplicationRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:770)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:757)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at com.silanis.ps.dtool.Application.main(Application.java:37)
Caused by: java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
at io.reactivex.Flowable.subscribe(Flowable.java:12995)
at io.reactivex.Flowable.subscribe(Flowable.java:12932)
at io.reactivex.internal.operators.flowable.FlowableZip$ZipCoordinator.subscribe(FlowableZip.java:127)
at io.reactivex.internal.operators.flowable.FlowableZip.subscribeActual(FlowableZip.java:79)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableTake.subscribeActual(FlowableTake.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableFlatMapSingle.subscribeActual(FlowableFlatMapSingle.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.Flowable.subscribe(Flowable.java:12935)
at com.silanis.ps.dtool.services.CliRunner.run(CliRunner.java:61)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)
... 5 common frames omitted
Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
at io.reactivex.internal.schedulers.ComputationScheduler.schedulePeriodicallyDirect(ComputationScheduler.java:139)
at io.reactivex.internal.operators.flowable.FlowableInterval.subscribeActual(FlowableInterval.java:46)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
... 20 common frames omitted
java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
究竟是什么意思?
与
有关的事情Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
答案:
正如关于这个问题的评论中提到的,当 Flowable.interval
被初始化为 0
时会抛出这个错误。将值设置为正值解决了问题。
Caused by: java.lang.IllegalArgumentException: null
这不是一个非常有用的异常,但根据源代码,似乎在 period <= 0
时发生了异常。
由于您简化了代码,所以不清楚该值可能出现在哪里,但是当提供给 Flowable.interval
的句点为 0 或负数时,似乎会发生此错误。出于某种原因,RxJava 接受了 ThreadPoolExecutor 不接受的 0
周期。
编辑:当 RxJava 2.1.1 发布时,这个错误将被修复,如果 period <= 0
.