我正在使用 JPL 用 Java 编写应用程序由 SWI-Prolog 提供从 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 系统。替换所有 read/1 和 write/1 在您的 Prolog 文本中大致:
my_read(提示,值):- set_UI_prompt(提示),等待(信号),get_UI_value(值)。
my_write(标签,值):- set_UI_result(标签,值)。
因为也在第二个单独的线程中运行,输入一个值 并按下某个按钮,UI 应用程序应通知(信号)。
或者重写专家系统的逻辑,使得推论 导致一个查询或答案可以在一个步骤中从外部调用 明智的时尚。但也建议生成一个线程,因为 推断可能需要时间。
最好的问候
P.S.:如果你的应用程序被倒置,你可以很容易地使 它有几个不同的用户界面: http://www.jekejeke.ch/idatab/doclet/prod/en/docs/10_pro08/13_press/02_deploy/package.html
关于java - 如何将我的 Java UI 连接到 JPL Prolog 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102336/