gpt4 book ai didi

java - 无法从 py4j 中的 Python 启动网关

转载 作者:太空宇宙 更新时间:2023-11-04 10:19:20 27 4
gpt4 key购买 nike

我正在尝试使用 py4j 从 Python 端启动 JavaGateway。以下是重现我遇到的问题所需的最少文件。

py4j.Py4JException: Target Object ID does not exist for this gateway :t

A.java

public class A {
}

EntryPoint.java

import py4j.GatewayServer;

public class EntryPoint {
public A getA() {
return new A();
}

public static void main(String[] args) {
GatewayServer gatewayServer = new GatewayServer(new EntryPoint());
gatewayServer.start();
System.out.println("server started");
}
}

我使用 IntelliJ 构建 .jar 文件,其中主类是 EntryPoint,并且 py4j.jar 作为依赖项包含在内。

现在,我尝试通过引用 python 中生成的 .jar 文件的路径来启动网关。

测试.py

from py4j.java_gateway import JavaGateway

gateway = JavaGateway.launch_gateway(classpath = '../out/artifacts/debugPy4j_jar/debugPy4j.jar')

a = gateway.entry_point.getA()

任何有关解决此问题的建议将不胜感激。

最佳答案

您无法使用 launch_gateway 指定自定义 Main 类,这意味着您无法指定入口点。您只能指定类路径,该类路径会附加到 Py4J jar 文件的路径中。

“t”是Java端入口点的名称:因为没有入口点,Py4J无法找到对象“t”。可以说,这个实现细节不应该在面向用户的异常中泄漏。

launch_gateway 被硬编码为使用 py4j.GatewayServer 作为主类,因为它期望 Java 端以某种方式运行。

就您的情况而言,您仍然可以在 GatewayServer 启动后从 Python 创建 EntryPoint 实例:

from py4j.java_gateway import JavaGateway

gateway = JavaGateway.launch_gateway(classpath='../out/artifacts/debugPy4j_jar/debugPy4j.jar')

a = gateway.jvm.A()

关于java - 无法从 py4j 中的 Python 启动网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51334387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com