Hello everyone,
I am working on a project where I am using a C++ framework and API to
create a game agent. My agent has to be flexible so it can react to/predict
events that occur inside the game environment, Jess has the kind
of flexibility that I need for my agent to be good, but I am having trouble
connecting to Jess from C++ and that is where I was hoping someone could
help me out.
*What I am doing right now*
I have a C++ program that starts a Java Virtual Machine and searches for a
Java class file name "TestJNIJessInvoke"
Inside of "TestJNIJessInvoke.java" I define a simple function in Jess, and
try to call that function then print the result
import jess.*;
public class TestJNIJessInvoke
{
public static void main(String[] args) throws JessException
{
Rete r = new Rete();
r.executeCommand("(deffunction square (?n) (return (* ?n ?n)))");
Value v = r.executeCommand("(square 3)");
System.out.println(v.intValue(r.getGlobalContext()));
}
}
But when I try to compile and link the C++ file with:
*cl *
* -I"C:\Program Files\Java\jdk1.7.0\include" *
* -I"C:\Program Files\Java\jdk1.7.0\include\win32" *
* TestJNIJessInvoke.cpp *
* -link "C:\Program Files\Java\jdk1.7.0\lib\jvm.lib"*
*
*
I get a class loader exception:
*Exception in thread "main" java.lang.NoClassDefFoundError: jess/Rete*
* at TestJNIJessInvoke.main(TestJNIJessInvoke.java:6)*
*Caused by: java.lang.ClassNotFoundException: jess.Rete*
* at java.net.URLClassLoader$1.run(URLClassLoader.java:366)*
* at java.net.URLClassLoader$1.run(URLClassLoader.java:355)*
* at java.security.AccessController.doPrivileged(Native Method)*
* at java.net.URLClassLoader.findClass(URLClassLoader.java:354)*
* at java.lang.ClassLoader.loadClass(ClassLoader.java:423)*
* at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)*
* at java.lang.ClassLoader.loadClass(ClassLoader.java:356)*
* ... 1 more*
*
*
Exception in thread "main" java.lang.NoClassDefFoundError: jess/Rete
at TestJNIJessInvoke.main(TestJNIJessInvoke.java:6)
Caused by: java.lang.ClassNotFoundException: jess.Rete
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 1 more
*Questions*
1) Is there some other directory that I am supposed to be including that has
the .class files for Jess? Right now all I am including is jess.jar
2) Is the general design I have a good idea? or is there a better way to
facilitate communication between Jess and C++?
Thanks,
Hunter McMillen