从Java程序传递SWI Prolog查询

从Java程序传递SWI Prolog查询,java,swi-prolog,Java,Swi Prolog,我的Java程序在Query变量中生成了一个查询。我想把这个发送给SWI Prolog,以得到这个问题的解决方案。下面显示了我用Java编写的与SWI Prolog通信的子代码 Process P= new ProcessBuilder("C:\\Program Files\\swipl\\bin\\swipl-win.exe").start(); BufferedReader processOutput = new BufferedReader(new InputStrea

我的Java程序在Query变量中生成了一个查询。我想把这个发送给SWI Prolog,以得到这个问题的解决方案。下面显示了我用Java编写的与SWI Prolog通信的子代码

  Process P= new ProcessBuilder("C:\\Program Files\\swipl\\bin\\swipl-win.exe").start();
        BufferedReader processOutput = new BufferedReader(new InputStreamReader(P.getInputStream()));
        BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(P.getOutputStream()));

        String commandToSend = Query;
         processInput.write(commandToSend);

但是SWI Prolog窗口会打开,但是我正在写入ProcessInput的COM文件没有发送到SWI Prolog。有人能给我建议最好的方法吗?我还需要SWI Prolog的查询执行输出文件。

将查询保存到外部文本文件,并从命令行(设置了适当的选项)执行
swipl
,并将输出重定向到另一个文本文件。然后,读取输出文件

例如:

  • 将查询保存到query.TXT,格式为
    :-query.
  • 运行swipl,重定向到OUTPUT.TXT:
    swipl-s QUERY.TXT-g halt--quiet>OUTPUT.TXT
  • 读取OUTPUT.TXT的内容

  • 另外,我怀疑您应该结合使用
    Runtime.getRuntime().exec(…)
    waitFor(…)
    来等待swipl生成输出。

    使用
    ProcessBuilder
    似乎是一种连接Java和Prolog的麻烦方法。您是否考虑过使用不同的API?我发现JPL可以用作Java和SWI Prolog的接口。但即使是这样,信息也不够丰富。。。