2010-01-20 15 views
5

Estoy escribiendo una aplicación en Java usando JPL proporcionada por SWI-Prolog para llamar a Prolog desde Java.¿Cómo conecto mi UI Java a una aplicación JPL Prolog?

Estoy usando Eclipse como el IDE. No sé cómo empezar este ejemplo he encontrado en Internet:

Aquí el código de 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(); 

} 

Si ejecuto el programa Prolog directamente de Prolog que funciona bien y lo mismo cuando lo llamo desde la aplicación Java

También puedo ver el resultado en la consola de Eclipse y puedo responder a las preguntas.

Pero me gustaría construir una interfaz de usuario Java para la interacción entre el usuario y el sistema, pero no sé cómo tomar el código de Prolog en Java y ponerlo en la interfaz de usuario.

Por ejemplo, ¿cómo puedo capturar la entrada desde la UI de Java y pasar esto al código de Prolog?

Respuesta

1

Es probable que el problema sea que el texto de Prolog no está escrito en el estilo invertido , como por ejemplo las aplicaciones Java UI.

Así que inicie su sistema Prolog en un hilo separado. Reemplace todos los valores de lectura/1 y de escritura/1 en el texto del Prólogo aproximadamente:

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

my_write (Etiqueta, Valor): - set_UI_result (Etiqueta, Valor).

Dado que también se ejecuta en una segunda secuencia separada, al ingresar un valor y presionar un botón, la aplicación de interfaz de usuario debe notificar (señal).

O reescriba la lógica del sistema experto, de modo que las inferencias que conducen a una consulta o respuesta se puedan llamar desde el exterior en un paso manera sabia. Pero también se recomienda engendrar un hilo, ya que la inferencia puede tomar tiempo.

Saludos

P.S .: Si se invierte estás aplicación, se puede hacer fácilmente un par de diferentes interfaces de usuario: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html

Cuestiones relacionadas