Как подключить мой пользовательский интерфейс Java к приложению JPL Prolog? - PullRequest
5 голосов
/ 20 января 2010

Я пишу приложение на Java, используя JPL , предоставленное SWI-Prolog для вызова Prolog из Java.

Я использую 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 для взаимодействия между пользователем и системой, но я не знаю, как взять код из Пролога в Java и поместить его в пользовательский интерфейс.

Например, как я могу получить входные данные из пользовательского интерфейса Java и передать их в код Пролога?

1 Ответ

1 голос
/ 13 апреля 2011

Возможно, проблема в том, что ваш текст на Прологе не написан на инвертированный стиль, как, например, приложения Java UI.

Итак, запустите вашу систему Prolog в отдельном потоке. Заменить все чтение / 1 и запись / 1 в вашем тексте Пролога примерно:

my_read (Подсказка, Значение): - set_UI_prompt (Подсказка), ожидание (сигнал), get_UI_value (Значение).

my_write (Метка, Значение): - set_UI_result (Метка, Значение).

Так как также работает во втором отдельном потоке, после ввода значения и нажав какую-то кнопку, приложение пользовательского интерфейса должно уведомить (сигнализировать).

Или переписать логику экспертной системы, чтобы сделать выводы ведущий к запросу или ответу может быть вызван извне в шаге мудрая мода. Но также рекомендуется порождение темы, так как вывод может занять время.

С наилучшими пожеланиями

П.С .: Если ваше приложение было перевернуто, вы можете легко сделать это пара разных интерфейсов: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html

...