2012-11-11 72 views
1

我對這個流口水的員工是全新的。因此,我在這裏遇到了一些麻煩。如何實例化一個.drl文件中的對象

rule "Raise the alarm when we have one or more fires" 
    when 
exists Fire() 
then 
    insert(new Alarm()); 
end 

當我有這個代碼,它工作正常。但我想改變這種有點像:

rule "Raise the alarm when we have one or more fires" 
    when 
exists Fire() 
then 
    $alarm = new Alarm(); 
    $alarm.RingBell(); 
    insert($alarm); 
end 

可能是你明白我想在這裏做。我想實例化Alarm類並激發它的RingBell方法。但它給了我這個錯誤

Rule Compilation error : [Rule name='Raise the alarm when we have one or more fires'] 
    com/sample/Rule_Raise_the_alarm_when_we_have_one_or_more_fires_cd7449c70a6a48c78f4e291495d23b05.java (8:436) : alarm cannot be resolved 

java.lang.IllegalArgumentException: Could not parse knowledge. 
    at com.sample.DroolsTest.readKnowledgeBase(DroolsTest.java:117) 
    at com.sample.DroolsTest.main(DroolsTest.java:28) 

如果你們幫我在這裏我將不勝感激:))

回答

4

這個錯誤是因爲$告警變量是從未宣佈過。儘量做到以下幾點:

rule "Raise the alarm when we have one or more fires" 
    when 
exists Fire() 
then 
    Alarm $alarm = new Alarm(); 
    $alarm.RingBell(); 
    insert($alarm); 
end 

的重要行是:報警 $報警=新警報();