从Java

时间:2016-02-17 00:29:06

标签: java call jess

我正在写我的硕士论文,我已经使用了JESS平台。我想问一个问题。

例如,我有一个名为“Main”的Java类:

public class Main {

    private String user = "Joe";
    public String getUser(){ return user; }
    public String setUser(String user){ this.user = user;}
    public static void main( String[] args ) throws Exception {
        Main main = new Main();
        Rete rete = new Rete();
        rete.store( "main", main );
        rete.batch( "two.clp" );
    }
}

现在我想调用clp文件并操作Main-Class-Object并执行此操作:

(printout t "main.user = " ((fetch main) getUser) crlf) ;; I got for this Joe
((fetch main) setUser "Robin")
(printout t "main.user = " ((fetch main) getUser) crlf) ;; For this I got Robin

但是现在我想问你如何从Java代码中调用这个名为“Robin”的被操作用户?如果我这样用Java调用:

public static void main( String[] args ) throws Exception {
        Main main = new Main();
        Rete rete = new Rete();
        rete.store( "main", main );
        rete.batch( "two.clp" );
        System.out.println(main.getUser());
    }

我的结果是“乔”而不是“罗宾”。 您能否告诉我如何获取(或调用)Javaobject的操作版本?为什么我在操作时不会操纵我的Java类 从Jess到Robin的用户名?

我将感谢你的留言。感谢。

1 个答案:

答案 0 :(得分:0)

我添加了我使用的类和clp.file:

java class:

  package Versuch;
import jess.*;

public class Auto {

    private String marke = "";
    private int ps = 0;

    public Auto(String marke, int ps){
        this.marke = marke;
        this.ps = ps;
    }

    public String getMarke() {
        return marke;
    }

    public void setMarke(String marke) {
        this.marke = marke;
    }


    public int getPs() {
        return ps;
    }



    public void setPs(int ps) {
        this.ps = ps;
    }

    public static void main(String[] args) {
        String getAktuell = "";

        Auto vw = new Auto("VW", 90);
        getAktuell = vw.getMarke();
        System.out.println(" before manipulating " + getAktuell );

        Rete engine = new Rete();
        engine.store("vw", vw);
            try {
                engine.batch("Versuch/rulebase.clp");

                System.out.println(" after manipulating " + getAktuell);



            } catch (JessException e) {
                System.out.println("JESS ERROR");
                e.printStackTrace();
            }       


    }

}

clp.file:

(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf)

((fetch vw) setMarke "Mercedes")


(printout t "vw.getMarke = " ((fetch vw) getMarke) crlf)

输出:

before manipulating VW
vw.getMarke = VW
vw.getMarke = Mercedes
 after manipulating VW

第一个输出和最后一个输出是来自java类的system.out.println调用。第二个和第三个输出是来自clp.file的打印输出调用。 任何人都明白为什么最后一次通话不是被操纵的? 对不起我对这个问题很新。 我将非常感谢您的帮助。