簡體   English   中英

如何將Java UI連接到JPL Prolog應用程序?

[英]How do I wire up my Java UI to a JPL Prolog application?

我正在使用SWI-Prolog提供的JPL編寫Java應用程序,從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系統。 大致替換Prolog文本中的所有read / 1和write / 1:

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

my_write(Label,Value): - set_UI_result(Label,Value)。

由於還在第二個單獨的線程中運行,在輸入值並點擊某個按鈕時,UI應用程序應該通知(信號)。

或者重寫專家系統的邏輯,以便可以以步進方式從外部調用導致查詢或答案的推斷。 但是也建議產生一個線程,因為推斷可能需要一些時間。

最好的祝福

PS:如果您的應用程序被顛倒了,您可以輕松地將它設置為幾個不同的UI: http//www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM