2010-01-20 1 views
5

나는 Java에서 Prolog를 호출하기 위해 SWI-Prolog이 제공 한 JPL을 사용하여 Java로 애플리케이션을 작성하고있다.Java UI를 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(); 

} 

은 벌금과 동일하게 작동 : 자바 코드 여기

: 나는 온라인으로 볼이 예제를 시작하는 방법을 모른다 자바 애플리케이션

는 또한 이클립스 콘솔에서 출력을 볼 수 있고 내가 질문에 회신 할 수 있습니다.

하지만 사용자와 시스템 간의 상호 작용에 대한 자바 UI를 구축하고자하지만 자바 프롤로그의 코드를 가지고하는 방법을 알고와 UI에 넣어하지 않습니다. 예를 들어

어떻게 자바 UI에서 입력을 캡처하고 프롤로그 코드이 통과 할 수 있습니까?

답변

1

문제는 프롤로그 텍스트가 자바 UI 응용 프로그램은 전형적으로 예를 들어 같은 반전 스타일로 작성되지 않은 것이 아마.

그래서 Prolog 시스템을 별도의 스레드에서 시작하십시오.

my_read (프롬프트, 값) : - set_UI_prompt (프롬프트), wait (신호), get_UI_value (값)로 모든 읽기/1 및 쓰기/1을 Prolog 텍스트에 바꿉니다.

my_write (라벨, 값) : - set_UI_result (라벨, 값).

두 번째 별도의 스레드에서 실행 중이므로 값을 입력하고 일부 버튼을 누르면 UI 응용 프로그램이 알림을 보내야합니다. 추론 쿼리 나 답에 이르는이 단계 현명한 방식으로 외부에서 호출 할 수 있도록

또는 전문가 시스템의 논리를 다시

. 그러나 스레드를 생성하는 것이 좋습니다. 추측에는 시간이 걸릴 수 있습니다.

안부

P.S : 개봉 된 응용 프로그램이 반전 된 경우, 당신은 쉽게 를 만들 수 그것은 다른 UI를 몇 : http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html