@staticmethod
def cus_start_jvm():
# print('--------------------- start JVM ------------------')
o_path = Path(os.path.dirname(__file__))
sikulixapi_path = str(o_path) + '/sikulix_lib/sikulixapi-2.0.5.jar'
startJVM(getDefaultJVMPath(), "-ea", f"-Djava.class.path={sikulixapi_path}")
@staticmethod
def cus_stop_jvm():
print('--------------------- end JVM ------------------')
jpype.shutdownJVM()
这两个静态方法位于 Python 类的定义中,它们用于启动和停止 Java 虚拟机 (JVM)。这里采用了 jpype,这是一个允许 Python 代码直接访问 Java 类库的库。以下是对每一部分代码的解释:
cus_start_jvm 方法
@staticmethod:这是一个装饰器,表明下面跟着的 cus_start_jvm 方法是一个静态方法。静态方法不需要类实例,可以通过类直接调用,即 ClassName.methodName()。
cus_start_jvm:是定义的方法名,cus_ 前缀可能表示这是“自定义”的一个方法。
o_path = Path(os.path.dirname(file)):这行代码创建了一个 Path 对象(由 pathlib 模块提供),该对象包含执行该脚本的目录路径。
sikulixapi_path = str(o_path) + ‘/sikulix_lib/sikulixapi-2.0.5.jar’:这里拼接了一个字符串,代表 SikuliX API 2.0.5 的 JAR 文件的路径。注意这里的相对路径假定了相应的 JAR 文件位于执行脚本文件同一个目录下的 sikulix_lib 子目录。
startJVM(getDefaultJVMPath(), “-ea”, f"-Djava.class.path={sikulixapi_path}"):使用 jpype 库启动 JVM。
getDefaultJVMPath() 函数找到了适合当前系统的 JVM 路径。
“-ea” 是 JVM 的一个命令行选项,启用断言(enable assertions)。
f"-Djava.class.path={sikulixapi_path}" 是传递给 JVM 的一个属性,设置了类路径为 sikulixapi_path 变量的值。这告诉 JVM 在指定的 JAR 文件中查找类。
cus_stop_jvm 方法
jpype.shutdownJVM():调用 jpype 库中的 shutdownJVM 函数停止 JVM。这通常在你的程序不再需要运行 Java 代码或者需要释放相关资源时进行。
总结
这段代码定义了启动和停止 Java 虚拟机 (JVM) 的方法,主要用来在 Python 环境中管理 Java 代码的执行。这在混合使用 Python 和 Java 语言编写代码或者当 Python 需要调用 Java 库时特别有用。例如,它可以用来启动 SikuliX API 的 JVM,SikuliX API 是一个可用于执行图形用户界面测试的 Java 库。
务必注意,在使用 jpype.startJVM 后不能调用 jpype.getDefaultJVMPath,因为 JVM 只能启动一次,再次调用 startJVM 将不起作用并可能导致错误。同样地,在调用 jpype.shutdownJVM 之后,你将不能再执行任何 JVM 操作,直到使用 startJVM 重新启动它。