2014-07-06 49 views
0

我執行我的應用程序中的methond使用的Jessp分析器類,以打開一個文件,並得到其內部的deftemplates和deffacts。問題是當試圖將結果獲取到一個對象變量時,它會在構造函數中詢問一個JessTokenStream。我試圖通過一個JessToken,但後來它抱怨的類型,它應該是E8。通過Jess文檔搜索,但沒有找到參數的解釋,只有構造函數的語法。 任何人都可以提供幫助嗎? 在此先感謝!Jess應用程序中的parseDeftemplate。不能提供JessTokenStream

+0

你的意思是'jess.Jesp'?而目前的Jess API不包含類JessTokenStream。 - 到目前爲止你的代碼是什麼?您搜索哪些文檔,API/javadoc肯定包含所有參數的解釋。也許我也應該要求Jess版本。 – laune

+0

@laune好了,我的傑斯的文檔中擁有的唯一的參考apiis這樣:public自定義模板parseDeftemplate(上下文的背景下, Rete算法引擎, jess.JessTokenStream JTS) 拋出我使用的最後一個版本傑斯JessException – creator4983

+0

@laune (71p2)。爲什麼在這裏發佈回覆時,我不能使用換行符作爲換行符?它直接進入保存評論。這就是上一篇文章看起來有點奇怪的原因。將嘗試通過網站搜索插入代碼的方式來縮進以便可讀。提前致謝! – creator4983

回答

0

類JessTokenStream是不公開的,所以你不能真正調用這些parseXXX()方法。由於歷史原因,它們是公開的,但客戶實際上不能使用它們。他們實際上應該從公共界面中刪除。

相反,使用的parseExpression()兩個參數的形式,然後測試返回的對象以確定其類型。然後你可以用返回的對象做你想做的事:

Rete engine = ... 
Jesp jesp = ... 
Object o = jesp.parseExpression(engine.getGlobalContext(), false); 
if (o instanceof Deffacts) { 
    Deffacts d = (Deffacts) o; 
    for (int i = 0; i<d.getNFacts(); ++i) { 
     Fact f = d.getFact(i); 
     Deftemplate t = f.getDeftemplate(); 
     System.out.println("Fact name is " + f.getName(); 
     System.out.println("Fact name is " + f.getName(); 
     for (String name: t.getSlotNames()) 
      System.out.println("Slot " + name + " contains " + f.getSlotValue(name)); 
    } 
} 
+0

感謝您的回答。我已經使用了parseExpression(),它能夠正確識別文件中的deftemplate和deffacts部分,但有沒有辦法訪問對象的內容?我試圖用parseDeftemplate做的事情是識別並獲取文件中的deftemplate,並且同樣爲deffacts。 – creator4983

+0

Deftemplate是一個公開課,將返回的對象轉換爲Deftemplate,然後使用其API。 –

+0

我一直在嘗試使用parseExpression的返回對象來工作,但目前爲止沒有結果。它正確地標識了類型,但是當試圖獲取我不能的對象的內容時。 – creator4983

相關問題