首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止Domino代理中Java中的NullPointerException子句中的最后一个子句

如何防止Domino代理中Java中的NullPointerException子句中的最后一个子句
EN

Stack Overflow用户
提问于 2022-01-07 16:19:09
回答 1查看 86关注 0票数 0

Java调试信息只返回null,而不说明try/catch最后子句中错误的实际原因,也不确定如何消除此错误消息或导致此错误消息的原因,这与调用的循环方法有关。

下面的是错误日志:

代码语言:javascript
复制
Agent Manager: Agent printing: Create Report final insert error:  null
Agent Manager: Agent  error: java.lang.NullPointerException
Agent Manager: Agent  error:  at JavaAgent.createReport(Unknown Source)
Agent Manager: Agent  error:  at JavaAgent.NotesMain(Unknown Source)
Agent Manager: Agent  error:  at lotus.domino.AgentBase.runNotes(Unknown Source)
Agent Manager: Agent  error:  at lotus.domino.NotesThread.run(Unknown Source)

下面的是被称为的函数

代码语言:javascript
复制
        private void createReport() {
        Integer qCount = 0;
        Document qDoc = null;
        ViewNavigator vNav = null;

        try {
            qView = currentDatabase.getView("RecsByRNo");
            qDoc = qView.getFirstDocument();
            vNav = qView.createViewNav();

            while (qDoc != null) {

                String qNo = qDoc.getItemValueString("RNo");
                String qType = qDoc.getItemValueString("EType");
                String qStatus = qDoc.getItemValueString("Status");
                String qBy = qDoc.getItemValueString("RBy");

                Document tmpReqDoc = qView.getNextDocument(qDoc);
                qDoc.recycle();
                qDoc = tmpReqDoc;
            }

        } catch (Exception e) {
            logErrors("Create Report error: ", e);

        } finally {
            try {
                qView.recycle();
                qDoc.recycle();
                vNav.recycle();
            } catch (Exception e) {
               logErrors("Create Report final insert error: ", e);
            }
        }

        agentLogger.LogAction("<<< Count: " + qCount + " >>>");
    }

    private void logErrors(String t, Exception e) {
        agentLogger.LogError(t + " " + e.getMessage());
        agentLogger.LogError(t + " " + e.getStackTrace().toString());
        System.out.println(t + " " + e.getMessage());
        e.printStackTrace();
    }

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-07 17:11:29

recycle()的顺序应该按创建的相反顺序更新。qDocvNav对象是从qView对象创建的。如果首先调用qView上的循环,那么其他对象也会变为null。在关闭null块中的对象之前检查finally总是很好的做法。

代码语言:javascript
复制
finally {
            try {
                if(vNav != null) vNav.recycle();
                if(qDoc != null) qDoc.recycle();
                if(qView != null) qView.recycle();
            } catch (Exception e) {
               logErrors("Create Report final insert error: ", e);
            }
        }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70624217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档