I'm trying to work with Java and Python Bridge JPype, but also with Neo4j (which is a graph database). When I try to run a simple Java-Program with JPYPE, there are no Problems.
import jpype as jp
jp.startJVM(jp.getDefaultJVMPath(), "-ea")
javaClass = jp.JClass('Jpype_test.A2')
javaInstance = javaClass()
javaInstance.callMe(2, 3)
jp.shutdownJVM()
And the class in Java is just:
package Jpype_test;
import helloworld.EmbeddedNeo4j;
import java.io.IOException;
public class A2 {
public A2() {
super();
}
public String callMe(final int a, final int b) throws IOException {
final int res = Math.abs(a - b);
try {
EmbeddedNeo4j.main(null);
} finally {
System.out.println("I can't do this!");
}
return ("Hello, World!" + res);
}
}
But when I try to run the "same" HelloWorld-Program written including Neo4j, there are a lot of Errors and I don't really understand what I'm doing wrong.
package helloworld;
import java.io.File;
import java.io.IOException;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.io.fs.FileUtils;
public class helloworld {
private static final String db_path = "target/neo4j-hello-db";
public String greeting;
GraphDatabaseService graphdb;
Node firstNode;
Node secondNode;
Relationship rs;
private static enum RelTypes implements RelationshipType {
KNOWS
}
public static void main(final String[] args) throws IOException {
final helloworld hello = new helloworld();
hello.createDb();
hello.removeData();
hello.shutDown();
}
void createDb() throws IOException {
FileUtils.deleteRecursively(new File(db_path));
graphdb = new GraphDatabaseFactory().newEmbeddedDatabase(db_path);
registerShutdownHook(graphdb);
try (Transaction tx = graphdb.beginTx()) {
firstNode = graphdb.createNode();
firstNode.setProperty("message", "Hello, ");
secondNode = graphdb.createNode();
secondNode.setProperty("message", "World!");
rs = firstNode.createRelationshipTo(secondNode, RelTypes.KNOWS);
rs.setProperty("message", "brave Neo");
System.out.println(firstNode.getProperty("message"));
System.out.println(rs.getProperty("message"));
System.out.println(secondNode.getProperty("message"));
greeting = ((String) firstNode.getProperty("message")) + ((String) rs.getProperty("message"))
+ ((String) secondNode.getProperty("message"));
tx.success();
}
}
void removeData() {
try (Transaction tx = graphdb.beginTx()) {
firstNode.getSingleRelationship(RelTypes.KNOWS, Direction.OUTGOING).delete();
firstNode.delete();
secondNode.delete();
tx.success();
}
}
void shutDown() {
System.out.println();
System.out.println("Shutting down database......");
graphdb.shutdown();
}
private static void registerShutdownHook(final GraphDatabaseService graphdb) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
graphdb.shutdown();
}
});
}
}
>> Traceback (most recent call last):
File "C:\Projects\Argon\workspace\TestNeo4jProject\src\helloworld\file.py", line 6, in <module>
javaClass = jp.JClass('helloworld.Hello')
File "C:\Python27\lib\site-packages\jpype\_jclass.py", line 54, in JClass
raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
jpype._jexception.ExceptionPyRaisable: java.lang.Exception: Class helloworld.Hello not found
I suppose there could be a Problem with classpath or something like this, but it Looks quite weird for me.. Thank's a lot if somebody can help with the solution!
The exception states: Class helloworld.Hello not found
. Your class is actually named helloworld.helloworld
. So, either make sure you are invoking the right class name, or change the class name so that it is helloworld.Hello
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.