java - 如何将我的 Java UI 连接到 JPL Prolog 应用程序?

标签 java user-interface prolog swi-prolog jpl

我正在使用 JPL 用 Ja​​va 编写应用程序由 SWI-Prolog 提供从 Java 调用 Prolog。

我使用 Eclipse 作为 IDE。我不知道如何开始我在网上找到的这个例子:

这里是java代码:

package prolog;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import jpl.Atom;
import jpl.Compound;
import jpl.Variable;
import jpl.Term;
import jpl.Query;
import jpl.JPL;


@SuppressWarnings({ "unchecked", "deprecation", "serial" })
public class JavaProlog extends JFrame {

 JButton  startButton = new JButton("Start");
 JTextArea  textArea = new JTextArea("A Diagnostic Expert System \n" +
           "for respiratory diseases and lung.");

 /**
  */
 JavaProlog(){
  Container cp=getContentPane();
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  setLocation (200,200);
  setSize  (300,200);
  setLayout (new FlowLayout());


  startButton.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    startDiagnose();
   }
  });

  cp.add(textArea);
  cp.add(startButton);

  setVisible(true); 
 }

 private void startDiagnose(){
  Term consult_arg[] = { 
          new Atom( "C://Users//i_vista//workspace//mdc.pl" ) 
      };
      Query consult_query = 
          new Query( 
              "consult", 
              consult_arg );

      boolean consulted = consult_query.query();

      if ( !consulted ){
          System.err.println( "Consult failed" );
          System.exit( 1 );
      }
 }

 public static void main( String argv[] ){
  JPL.init();
  JavaProlog jpTest = new JavaProlog();

}

如果我直接从 Prolog 运行 Prolog 程序,它工作正常,当我从 Java 应用程序调用它时也一样。

我还可以在 Eclipse 控制台中看到输出,我可以回复问题。

但我想为用户和系统之间的交互构建一个 Java UI,但我不知道如何从 Java 中的 Prolog 中获取代码并将其放入 UI 中。

例如,如何从 Java UI 捕获输入并将其传递给 Prolog 代码?

最佳答案

问题可能是您的 Prolog 文本不是用 倒置样式,例如 Java UI 应用程序通常是这样的。

所以在一个单独的线程中启动你的 Prolog 系统。替换所有 read/1 和 write/1 在您的 Prolog 文本中大致:

my_read(提示,值):- set_UI_prompt(提示),等待(信号),get_UI_value(值)。

my_write(标签,值):- set_UI_result(标签,值)。

因为也在第二个单独的线程中运行,输入一个值 并按下某个按钮,UI 应用程序应通知(信号)。

或者重写专家系统的逻辑,使得推论 导致一个查询或答案可以在一个步骤中从外部调用 明智的时尚。但也建议生成一个线程,因为 推断可能需要时间。

最好的问候

P.S.:如果你的应用程序被倒置,你可以很容易地使 它有几个不同的用户界面: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html

关于java - 如何将我的 Java UI 连接到 JPL Prolog 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102336/

相关文章:

javascript - 类似 iPhone 的(老虎机) 'picker' 网络选择框?

prolog - 使用 `library(aggregate)` 计算两个序列中匹配元素的复杂度

list - Prolog - 元素索引

java - 为另一个构造函数提供类型变量值

java - 如何在 java 中以自下而上的方式读取文本文件?

java - JSR 303 实现给出了 ClassCastException

java - MigLayout - 使单元格随着窗口的增长而增长

java - 访问 ActionListener 类中的 Gui,使用计时器每 x 秒更新一次

prolog - 在序言中查找两个列表之间不重复的交集

java - RandomAccessFile:在最后一项后添加空格?