Java Optaplanner NullPointerException

Java Optaplanner NullPointerException,java,drools,optaplanner,Java,Drools,Optaplanner,在设置了drools的情况下使用optaplanner时,我遇到了一个空指针异常。这发生在方法evaluate中的org.drools.core.rule.constraint.MvelConstraint.java中。空对象是leftTuple: protected boolean evaluate(InternalFactHandle handle, InternalWorkingMemory workingMemory, LeftTuple leftTuple) { if

在设置了drools的情况下使用optaplanner时,我遇到了一个空指针异常。这发生在方法
evaluate
中的
org.drools.core.rule.constraint.MvelConstraint.java
中。空对象是leftTuple:

    protected boolean evaluate(InternalFactHandle handle, InternalWorkingMemory workingMemory, LeftTuple leftTuple) {
    if (!jitted) {
        if (conditionEvaluator == null) {
            createMvelConditionEvaluator(workingMemory);
            if (TEST_JITTING && !isDynamic) { // Only for test purposes
                boolean mvelValue = forceJitEvaluator(handle, workingMemory, leftTuple);
            }
        }

        if (!TEST_JITTING && !isDynamic && invocationCounter.getAndIncrement() == JIT_THRESOLD) {
            jitEvaluator(handle, workingMemory, leftTuple);
        }
    }
    return conditionEvaluator.evaluate(handle, workingMemory, leftTuple);
}

你知道这是什么原因吗?Geoffrey?

在该方法中使用
leftTuple
不会直接导致NPE。它发生在这个方法下面。如果您愿意验证它仍然在
6.4.0.Beta2中,然后包括一种复制is的方法(通常DRL和域类就足够了),或者至少是stacktrace。把它链接到这里,我会追踪它的
6.4.0.CR1
(马上就要来了)。是的,安迪,你是对的,它是由以下原因引起的,但来源不明:在ConditionEvaluatoreA3997683D949E28CE6EAF6FECA06ced.evaluate(未知来源)在org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:258)这是JIRA的问题Geoffrey,谢谢!好的,事实证明改进错误消息并不像我想的那么简单——我们正在努力。同时,我建议在你找到违反规则之前先对规则进行评论:那么,找出NPE的原因应该不会太难。要知道,所有计划变量最初都是以null开头的,所以许多规则都有一种模式,比如
assignment(var!=null,var.type==“type a”)
,以避免var.type中出现NPE