简体   繁体   中英

Get a lot of errors (Exceptions) while trying to call Java-classes (Neo4j) with JPype

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM