You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Python脚本调用Java文件时出现TypeError错误求助

解决Py4J调用Java类时出现的TypeError: 'JavaPackage' object is not callable错误

这个错误本质是Py4J找不到你定义的ExampleWithField Java类,所以返回了一个JavaPackage对象而非可实例化的Java类,导致你尝试创建实例时失败。下面是一步步的解决方法:

1. 确保Java类已正确编译

首先,你需要把你的Java代码编译成.class文件:

javac ExampleWithField.java

执行完这个命令后,当前目录下会生成ExampleWithField.class文件。

2. 让Py4J的Java网关能找到这个类

Py4J的工作机制是Python客户端连接到一个运行中的Java GatewayServer,所以你需要确保GatewayServer能加载到你的ExampleWithField类。有两种常见方式:

方式一:编写Gateway启动类

创建一个简单的Java类来启动GatewayServer,并把你的类实例作为服务对象暴露:

import py4j.GatewayServer;

public class GatewayStarter {
    public static void main(String[] args) {
        // 实例化你的类并传递给GatewayServer
        GatewayServer gatewayServer = new GatewayServer(new ExampleWithField());
        gatewayServer.start();
        System.out.println("Py4J Gateway Server is running...");
    }
}

然后编译这个启动类(需要把Py4J的jar包加到类路径,比如你用的是py4j0.10.9.7.jar):

# Linux/macOS
javac -cp py4j0.10.9.7.jar GatewayStarter.java

# Windows
javac -cp py4j0.10.9.7.jar GatewayStarter.java

最后启动GatewayServer:

# Linux/macOS
java -cp .:py4j0.10.9.7.jar GatewayStarter

# Windows(注意用分号分隔类路径)
java -cp .;py4j0.10.9.7.jar GatewayStarter

方式二:直接用命令行启动GatewayServer

如果你不想写启动类,可以直接用Py4J提供的GatewayServer命令行工具,指定类路径包含你的.class文件:

# Linux/macOS
java -cp .:py4j0.10.9.7.jar py4j.GatewayServer --classpath .

# Windows
java -cp .;py4j0.10.9.7.jar py4j.GatewayServer --classpath .

3. 修正Python代码(适配Python3)

你的Python代码里print c是Python2的语法,Python3需要改成print(c),修正后的代码:

from py4j.java_gateway import JavaGateway
gateway = JavaGateway()
example = gateway.jvm.ExampleWithField()
c = example.member()
print(c)

4. 验证运行顺序

一定要先启动Java的GatewayServer,再运行你的Python脚本,这样Python客户端才能连接到运行中的网关并找到你的Java类。

内容的提问来源于stack exchange,提问作者ParvezAalam Mevegar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:58