向大佬请教下在 Python 中使用 pyjnius 调用 Jar 包,如何正确的引入 jar 包。

30 天前
 yuyanggongzi

from jnius import autoclass
import os

fastjson_jar_path = 'D:\\workProject\\RPT_CFAE_B\\Jar\\fastjson-1.2.83.jar'

# 在脚本中设置 CLASSPATH 环境变量
os.environ['CLASSPATH'] = fastjson_jar_path

# 加载 fastjson 类
JSONObject = autoclass('com.alibaba.fastjson.JSONObject')


def parse_json(json_str):
    # 创建一个 JSONObject 对象
    json_object = JSONObject()
    # 调用 parse 方法解析 JSON 字符串
    result = json_object.parse(json_str)
    return result


# 示例用法
if __name__ == "__main__":
    # # 读取 fastjson.jar 文件路径
    # jar_path = os.path.abspath("D:\\workProject\\RPT_CFAE_B\\Jar")
    # # 添加 jar 文件到 Java 类路径
    # autoclass('java.lang.System').setProperty('java.class.path', jar_path)

    # 要解析的 JSON 字符串
    json_string = '{"name": "John", "age": 30}'

    # 解析 JSON 字符串
    parsed_json = parse_json(json_string)
    print(parsed_json)
    

上面是写的 demo 然后运行报错

jnius.JavaException: JVM exception occurred: com/alibaba/fastjson/JSONObject java.lang.NoClassDefFoundError

查了各种方法都不行

852 次点击
所在节点    Python
5 条回复
Volekingsg
30 天前
光看代码没看出啥问题( Jar 包,类是否正确需要自行确认),一个建议是可以考虑在外部设置 CLASSPATH 然后再启用脚本
givenge
29 天前
pyjnius 不直接支持加载 jar 文件,你需要将 jar 包中的类添加到 Java 的 Classpath 中
yuyanggongzi
29 天前
换用 JPype1 了,能够成功加载并执行。
forQ
29 天前
换 jpype 试试
ruanimal
29 天前
jnius_config.add_classpath(fastjson_jar_path )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX