2010-01-20 6 views
5

Я пишу приложение в Java, используя JPL, предоставленный SWI-Prolog для вызова Prolog с Java.Как подключить Java-интерфейс к приложению JPL Prolog?

Я использую Eclipse в качестве среды IDE. Я не знаю, как начать этот пример я нашел в Интернете:

Здесь ява код:

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(); 

} 

Если я запускаю программу на Прологе непосредственно из Пролога она отлично работает и то же, когда я называю его из приложение Java.

Я также могу видеть вывод в консоли Eclipse, и я могу ответить на вопросы.

Но я хотел бы создать пользовательский интерфейс Java для взаимодействия между пользователем и системой, но я не знаю, как взять код из Prolog на Java и поместить его в пользовательский интерфейс.

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

ответ

1

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

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

my_read (Prompt, Value): - set_UI_prompt (Prompt), wait (signal), get_UI_value (Value).

my_write (метка, значение): - set_UI_result (метка, значение).

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

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

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

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

Смежные вопросы