2010-01-20 7 views
5

J'écris une application en Java en utilisant JPL fourni par SWI-Prolog pour appeler Prolog à partir de Java. J'utilise Eclipse comme IDE. Je ne sais pas comment commencer cet exemple, je trouve en ligne:Comment connecter mon interface Java à une application JPL Prolog?

Voici le code 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 je lance le programme Prolog directement à partir de Prolog il fonctionne très bien et même quand je l'appelle de l'application Java.

Je peux également voir la sortie dans la console Eclipse et je peux répondre aux questions.

Mais je voudrais construire une interface Java pour l'interaction entre l'utilisateur et le système, mais je ne sais pas comment prendre le code de Prolog en Java et le mettre dans l'interface utilisateur. Par exemple, comment puis-je capturer l'entrée de l'interface Java et la transmettre au code Prolog?

Répondre

1

Le problème est probablement que votre texte Prolog n'est pas écrit en style inversé , comme le sont généralement les applications Java UI. Commencez votre système Prolog dans un fil séparé. Remplacer tous lu/1 et écrire/1 dans votre texte Prolog d'environ:

my_read (Prompt, valeur): - set_UI_prompt (rapide), attendez (signal), get_UI_value (valeur).

my_write (Libellé, Valeur): - set_UI_result (Libellé, Valeur). Comme également en cours d'exécution dans un deuxième thread séparé, en entrant une valeur et en appuyant sur un bouton, l'application UI doit notifier (signal).

Ou réécrire la logique du système expert, de sorte que les conclusions conduisant à une requête ou une réponse peut être appelé de l'extérieur dans une étape mode sage. Mais il est également recommandé de générer un thread, car l'inférence peut prendre du temps.

Cordialement

P.S .: Si vous êtes demande était inversée, vous pouvez facilement faire un couple de différents UIs: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html

Questions connexes