0

Java と Python Bridge JPype だけでなく、Neo4j (グラフ データベース) も使用しようとしています。JPPE で単純な Java プログラムを実行しようとしても、問題はありません。

import jpype as jp

jp.startJVM(jp.getDefaultJVMPath(), "-ea")
javaClass = jp.JClass('Jpype_test.A2')
javaInstance = javaClass()
javaInstance.callMe(2, 3)
jp.shutdownJVM()

Javaのクラスは次のとおりです。

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);
    }
}

しかし、Neo4j を含む「同じ」HelloWorld プログラムを実行しようとすると、多くのエラーが発生し、何が間違っているのかよくわかりません。

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

クラスパスなどに問題がある可能性があると思いますが、私にはかなり奇妙に見えます..誰かが解決策を手伝ってくれたらどうもありがとう!

4

1 に答える 1

0

例外は次のように述べていますClass helloworld.Hello not found。あなたのクラスは実際には という名前helloworld.helloworldです。そのため、正しいクラス名を呼び出していることを確認するか、クラス名を変更してhelloworld.Hello.

于 2015-05-15T15:43:38.103 に答える