Java 将SWI Prolog';s JPL接口可以正常工作

Java 将SWI Prolog';s JPL接口可以正常工作,java,prolog,swi-prolog,jpl,Java,Prolog,Swi Prolog,Jpl,我想使用JPL为我的项目创建一个图形界面,所以我去搜索了一个代码示例开始工作,我下载了代码,但当我运行它时,它显示以下消息: ERROR: c:/program files/swipl/library/jpl.pl:4243: '$open_shared_object'/3: Não foi possível encontrar o módulo especificado (this stands for "it wasn't possible to find the espec

我想使用JPL为我的项目创建一个图形界面,所以我去搜索了一个代码示例开始工作,我下载了代码,但当我运行它时,它显示以下消息:

ERROR: c:/program files/swipl/library/jpl.pl:4243:
        '$open_shared_object'/3: Não foi possível encontrar o módulo especificado (this stands for "it wasn't possible to find the especified module)".

ERROR: c:/program files/swipl/library/jpl.pl:4243:
        c:/program files/swipl/library/jpl.pl:4243: Initialization goal raised exception:
        library `java' does not exist (Please add directory holding java.dll to %PATH%)
ERROR: c:/users/User/desktop/system/medical expert system.pl:4:
        Exported procedure jpl:jpl_c_lib_version/1 is not defined
当我尝试使用代码中的一个函数时,它显示:

ERROR: Undefined procedure: jpl:jni_func/3
ERROR: In:
ERROR:   [14] jpl:jni_func(6,'javax/swing/JFrame',_10490)
ERROR:   [13] jpl:jFindClass('javax/swing/JFrame',_10522) at c:/program files/swipl/library/jpl.pl:1631
ERROR:   [12] jpl:jpl_type_to_class(class([javax|...],['JFrame']),_10554) at c:/program files/swipl/library/jpl.pl:3049
ERROR:   [11] jpl:jpl_new_1(class([javax|...],['JFrame']),['Expert System'],_10606) at c:/program files/swipl/library/jpl.pl:169
ERROR:   [10] jpl:jpl_new('javax.swing.JFrame',['Expert System'],_10664) at c:/program files/swipl/library/jpl.pl:138
ERROR:    [9] interface2 at c:/users/User/desktop/system/medical expert system.pl:180
ERROR:    [7] <user>
ERROR: 
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
错误:未定义的过程:jpl:jni_func/3
错误:在:
错误:[14]jpl:jni_func(6,'javax/swing/JFrame',_10490)
错误:[13]jpl:jFindClass('javax/swing/JFrame',_10522)位于c:/program files/swipl/library/jpl.pl:1631
错误:[12]jpl:jpl_type_to_class(class([javax |…],[JFrame']),_10554)位于c:/program files/swipl/library/jpl.pl:3049
错误:[11]jpl:jpl|u new_1(类([javax |…],['JFrame']),['Expert System'],_10606)位于c:/program files/swipl/library/jpl.pl:169
错误:[10]jpl:jpl_new('javax.swing.JFrame',['Expert System'],_10664)位于c:/program files/swipl/library/jpl.pl:138
错误:[9]界面2位于c:/users/User/desktop/system/medical expert system。pl:180
错误:[7]
错误:
错误:注意:由于上次调用优化,某些帧丢失。
错误:在调试模式(:-debug.)下重新运行程序以获取更多详细信息。
我试图将包含java.dll的文件夹放到系统变量的路径中,但它始终显示相同的消息 我的SWI Prolog版本是7.6.4 64位,我认为代码本身没有问题,因为在我下载它的视频中没有人抱怨它


编辑:消息说java.dll已经消失,现在只剩下另外两条消息,我已经在系统变量下的路径中包含了我认为相关的所有内容。

确保系统变量中的
CLASSPATH
变量包含与SWI Prolog绑定的
jpl.jar
文件的路径。例如,在我的Windows 7虚拟机中,我从SWI Prolog中获得:

?- getenv('CLASSPATH', P).
P = 'c:/program files/swipl/lib/jpl.jar'.
我所有使用JPL的代码在这个变量定义中运行良好。此外,加载JPL库应打印如下内容(假设是最新的SWI Prolog版本):

更新

尝试在系统变量中定义
JAVA\u HOME
变量。我在macOS上使用:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home

路径在Windows上会有所不同,具体取决于您安装的Java版本,但应以感兴趣的
HOME

结尾:SWI Prolog FAQ-关于JPL的简短段落。感兴趣的:JPL:双向Prolog/Java接口-包括指向目标的链接,使用Java Prolog,用户指南,API参考,Gotchas,安装,感兴趣的发行说明:SWI Prolog文档:-列出用于JPL的谓词。相关问题:卸载和安装新版本解决了我的问题,但请确保按照您所说的从我下载开发版本,并在Path中包括java.dll和jvm.dll(它也在问我),所以现在是中间消息(表示java.dll不在路径中的)已消失,但其他2条错误消息仍然存在there@LucasAlves
getenv/1
目标是否返回有效的
CLASSPATH
?请注意,确切的路径可能取决于实际的SWI Prolog安装。是的。我刚刚想出来,如果我使用类似jpl\u primitive\u type/1的东西,它可以工作,但函数是特定的ove(在问题中)don't。错误是否也发生在
use_module(library(jpl))
目标中?是的,我制作了一个仅包含use_module(library(jpl))目标的文件,它显示了相同的两个错误:“$open_shared_object”/3和导出过程jpl:jpl_c_lib_version/1未定义,这与其他代码相同。
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home