【问题标题】:java.lang.NullPointerException at org.web3j.protocol.core.filters.LogFilter.process(LogFilter.java:46)org.web3j.protocol.core.filters.LogFilter.process(LogFilter.java:46) 处的 java.lang.NullPointerException
【发布时间】:2021-10-25 09:43:41
【问题描述】:

我正在尝试使用 web3j 读取区块链事件(在 Java 中)但得到 NPE:

java.lang.NullPointerException: null
    at org.web3j.protocol.core.filters.LogFilter.process(LogFilter.java:46)
    at org.web3j.protocol.core.filters.Filter.getInitialFilterLogs(Filter.java:119)
    at org.web3j.protocol.core.filters.Filter.run(Filter.java:69)
    at org.web3j.protocol.rx.JsonRpc2_0Rx.run(JsonRpc2_0Rx.java:89)
    at org.web3j.protocol.rx.JsonRpc2_0Rx.lambda$ethLogFlowable$2(JsonRpc2_0Rx.java:79)
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
    at io.reactivex.Flowable.subscribe(Flowable.java:14935)
    at io.reactivex.Flowable.subscribe(Flowable.java:14872)
    at io.reactivex.Flowable.subscribe(Flowable.java:14791)

有问题的代码

for (EthLog.LogResult logResult : logResults) { https://github.com/web3j/web3j/blob/master/core/src/main/java/org/web3j/protocol/core/filters/LogFilter.java#L46

    @Override
    protected void process(List<EthLog.LogResult> logResults) {
        for (EthLog.LogResult logResult : logResults) {
            if (logResult instanceof EthLog.LogObject) {
                Log log = ((EthLog.LogObject) logResult).get();
                callback.onEvent(log);
            } else {
                throw new FilterException(
                        "Unexpected result type: " + logResult.get() + " required LogObject");
            }
        }
    }

提出的问题https://github.com/web3j/web3j/issues/1486 但没想到会被修复,我该怎么办?

  • 示例代码和/或代码 sn-ps
    private void createEventMonitor() {
        log.info("createEventMonitor() begin...");
        // contract from block
        EthFilter filter = new EthFilter(DefaultBlockParameter.valueOf(new BigInteger("7605105")),
                DefaultBlockParameterName.LATEST, contractAddress);

        //Disposable subscription
        subscription = web3j
                .ethLogFlowable(filter)
                .subscribe(
                        event -> {
            log.info("Withdraw event received:");
            log.info("  event data >>> {}", event.getData());
            log.info("  event topic >>> {}", event.getTopics().stream().collect(Collectors.joining()));
            log.info("  event address >>> {}", event.getAddress());
            log.info("  event txHash >>> {}", event.getTransactionHash());
        }, error -> {
            log.error("Event error: {}", error, error); //!
        });

        log.info("createEventMonitor() end.");
    }

【问题讨论】:

    标签: java events nullpointerexception solidity web3-java


    【解决方案1】:

    这个错误应该会在https://github.com/web3j/web3j/pull/1495解决https://github.com/web3j/web3j/issues/1486之后消失(应该是4.8.7之后的下一个版本)

    简而言之:JSON RPC 错误在 web3j 级别上不可见。

    分析类似问题,使用日志级别 debug 运行程序以查看 JSON RPC 消息。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2014-11-19
      • 2013-03-20
      • 2016-05-05
      • 2015-06-23
      • 2013-09-17
      • 2012-10-13
      • 2015-12-29
      相关资源
      最近更新 更多