Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java调用Jess操纵的对象_Java_Call_Jess - Fatal编程技术网

从Java调用Jess操纵的对象

从Java调用Jess操纵的对象,java,call,jess,Java,Call,Jess,) 我正在写我的硕士论文,我必须使用JESS平台。我想问一个问题 例如,我有一个名为“Main”的Java类: 现在我想调用clp文件并操作主类对象,然后执行以下操作: (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)

)

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

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

现在我想调用clp文件并操作主类对象,然后执行以下操作:

(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的用户名


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

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

java类:

  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.xml文件:

(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的打印输出调用。 有人知道为什么最后一个电话不是被操纵的吗? 对不起,我对这个问题还很陌生。
我将非常感谢您的帮助。

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

java类:

  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.xml文件:

(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的打印输出调用。 有人知道为什么最后一个电话不是被操纵的吗? 对不起,我对这个问题还很陌生。
我将非常感谢您的帮助。

最好检查您发布的代码是否(a)没有语法错误,以及(b)是否真实再现了您描述的问题。您将主类中user的值设置为“Joe”,因此当您调用getUser时,当然会得到Joe。就像在第二个代码片段中一样,您需要调用setUser,main.setUser(“Robin”),最好检查您发布的代码是否(a)没有语法错误,并且(b)确实再现了您描述的问题。您将主类中user的值设置为“Joe”,因此,当您调用getUser时,当然会得到Joe。就像在第二段代码中一样,您需要调用setUser,main.setUser(“Robin”),哦,好的,我找到了解决方案。我忘了问实际值。如果我在system.out.println(“在操纵”+getAktuell之后)之前添加,则-->getAktuell=vw.getMarke();然后我得到了大众的操纵版本。有时候,在问别人之后想问题更容易些:-)问别人总是可以的,但是(正如你现在清楚地看到的)问一个不能真正描述你问题的问题是不可以的你可以删除整个问题-这对任何人都没有好处。-永远不要用额外的信息回答你自己的问题——这应该进入你的问题,你可以编辑。请不要“破坏”你的帖子,那样会造成混乱。你应该改为将这些信息编辑到你的问题中,然后删除下面带有“删除”链接的帖子。哦,好的,我找到了解决方案。我忘了问实际值。如果我在system.out.println(“在操纵”+getAktuell之后)之前添加,则-->getAktuell=vw.getMarke();然后我得到了大众的操纵版本。有时候,在问别人之后想问题更容易些:-)问别人总是可以的,但是(正如你现在清楚地看到的)问一个不能真正描述你问题的问题是不可以的你可以删除整个问题-这对任何人都没有好处。-永远不要用额外的信息回答你自己的问题——这应该进入你的问题,你可以编辑。请不要“破坏”你的帖子,那样会造成混乱。你应该改为将这些信息编辑到你的问题中,然后删除下面带有“删除”链接的帖子。