2010-01-20 12 views
5

Tôi đang viết một ứng dụng bằng Java sử dụng JPL được cung cấp bởi SWI-Prolog để gọi Prolog từ Java.Làm cách nào để kết nối giao diện người dùng Java của tôi với ứng dụng JPL Prolog?

Tôi đang sử dụng Eclipse làm IDE. Tôi không biết làm thế nào để bắt đầu ví dụ này tôi tìm thấy trực tuyến:

Đây mã 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(); 

} 

Nếu tôi chạy chương trình Prolog trực tiếp từ Prolog nó hoạt động tốt và giống nhau khi tôi gọi nó từ ứng dụng Java.

Tôi cũng có thể xem kết quả đầu ra trong bảng điều khiển Eclipse và tôi có thể trả lời các câu hỏi.

Nhưng tôi muốn xây dựng giao diện người dùng Java cho tương tác giữa người dùng và hệ thống nhưng tôi không biết cách lấy mã từ Prolog trong Java và đặt nó trong giao diện người dùng.

Ví dụ như thế nào tôi có thể nắm bắt đầu vào từ giao diện người dùng Java và chuyển mã này vào mã Prolog?

Trả lời

1

Sự cố có thể là văn bản Prolog của bạn không được viết theo kiểu ngược, ví dụ như các ứng dụng Java UI thường là.

Vì vậy, hãy bắt đầu hệ thống Prolog của bạn trong một chuỗi riêng biệt. Thay thế tất cả đọc/1 và viết/1 trong văn bản Prolog của bạn bằng khoảng:

my_read (Nhắc, Giá trị): - set_UI_prompt (Nhắc), chờ (tín hiệu), get_UI_value (Giá trị).

my_write (Nhãn, Giá trị): - set_UI_result (Nhãn, Giá trị).

Vì cũng chạy trong chuỗi riêng thứ hai, khi nhập giá trị và nhấn một số nút, ứng dụng giao diện người dùng sẽ thông báo (tín hiệu).

Hoặc viết lại logic của hệ thống chuyên gia, để các tham chiếu dẫn đến truy vấn hoặc câu trả lời có thể được gọi từ bên ngoài theo một bước thời trang thông minh. Nhưng cũng sau đó sinh sản một sợi được khuyến khích, vì suy luận có thể mất thời gian.

Trân trọng

P.S .: Nếu ứng dụng bạn đang bị đảo ngược, bạn có thể dễ dàng thực hiện nó một vài UIS khác nhau: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html