【问题标题】:Using jpype to getInstance a singleton object in a jar file使用 jpype 获取 jar 文件中的单例对象
【发布时间】:2015-08-31 20:14:12
【问题描述】:

我在从单例对象中获取实例时遇到了一些问题,因为 jpype 需要一个默认构造函数来实例化类,但是单例没有默认构造函数,或者只是保持私有以强制通过 getInstance 方法获取实例。当我尝试获取实例时,我在下面看到此错误:

Traceback (most recent call last):
      File "/home/myuser/PycharmProjects/PythonTests/JavaTests.py", line 21, in <module>
        service = jpype.JClass("com.classpackage.Service")
      File "/usr/lib64/python2.7/site-packages/jpype/_jclass.py", line 54, in JClass
        raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
    jpype._jexception.ExceptionPyRaisable: java.lang.Exception: Class com.classpackage.Service not found

下面的代码

import jpype

jpype.startJVM("/usr/java/jdk1.7.0_79/jre/lib/amd64/server/libjvm.so",
               "-Djava.class.path=Service.jar")

jpype.java.lang.System.out.println("Hello!!!")

MODEL_PACKAGE = "com.classpackage"

SERVICE_PACKAGE = "com.classpackage"

info = jpype.JPackage(MODEL_PACKAGE).Info()

jpype.java.lang.System.out.println("Hello 2!!!")

#the error happens in this line below. This class service is a singleton.
service = jpype.JClass("com.classpackage.Service")

jpype.java.lang.System.out.println("Hello 3!!!")
jpype.shutdownJVM()

有人知道在 python 中使用 jpype 在 java 中使用单例的解决方法吗?

谢谢。

【问题讨论】:

    标签: java python jpype


    【解决方案1】:

    使用

    Service = jpype.JPackage("com.classpackage").Service
    

    相反。然后调用

    instance = Service.getInstance()
    

    得到单子。

    【讨论】:

    • instance = Service.getInstance() RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121 收到此错误。这很奇怪,它必须有效,但不是。
    • @EvertonPreda 确保您的 JPype 版本至少为 0.5.5。从pypi.python.org/pypi/JPype1获取最新版本
    猜你喜欢
    • 2017-10-17
    • 2014-11-28
    • 2020-04-23
    • 2021-01-30
    • 2012-07-27
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多