[英]How do I wire up my Java UI to a JPL Prolog application?
我正在使用SWI-Prolog提供的JPL编写Java应用程序,从Java调用Prolog。
我正在使用Eclipse作为IDE。 我不知道如何启动我在网上找到的这个例子:
这里是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();
}
如果我直接从Prolog运行Prolog程序,那么当我从Java应用程序调用它时它工作正常。
我也可以在Eclipse控制台中看到输出,我可以回答问题。
但我想为用户和系统之间的交互构建一个Java UI,但我不知道如何从Java中获取Prolog中的代码并将其放在UI中。
例如,如何从Java UI捕获输入并将其传递给Prolog代码?
问题可能是您的Prolog文本不是以反向样式编写的,例如Java UI应用程序通常是。
因此,在一个单独的线程中启动您的Prolog系统。 大致替换Prolog文本中的所有read / 1和write / 1:
my_read(提示,值): - set_UI_prompt(提示),等待(信号),get_UI_value(值)。
my_write(Label,Value): - set_UI_result(Label,Value)。
由于还在第二个单独的线程中运行,在输入值并点击某个按钮时,UI应用程序应该通知(信号)。
或者重写专家系统的逻辑,以便可以以步进方式从外部调用导致查询或答案的推断。 但是也建议产生一个线程,因为推断可能需要一些时间。
最好的祝福
PS:如果您的应用程序被颠倒了,您可以轻松地将它设置为几个不同的UI: http : //www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.