Python:javabridge虚拟机只工作一次



我需要使用bioformats python来读取显微镜图像。要使用它,需要一个Java虚拟机。

我只能使用javaVM一次,如果我再次执行我的python脚本,我会得到一个错误。

如果我重新启动spyder内核,脚本只能再次运行一次

我安装了JDK(8u181(并设置了路径变量。我使用Spyder和python 3.6。

以下是我用来测试javaVM的代码:

import javabridge
javabridge.start_vm(run_headless=True)
try:
print(javabridge.run_script('java.lang.String.format("Hello, %s!", greetee);',
dict(greetee='world')))
finally:
javabridge.kill_vm()

我第一次执行时获得的:

>>> Hello, world!

这是我第二次尝试运行时收到的错误消息

Traceback (most recent call last):
File "C:UsersZ820Miniconda3envspy37libsite-packagesjavabridgejutil.py", line 281, in start_thread
env = vm.create(args)
File "_javabridge.pyx", line 653, in _javabridge.JB_VM.create
RuntimeError: Failed to create Java VM. Return code = -1
Failed to create Java VM
Traceback (most recent call last):
File "<ipython-input-2-81778b2b637e>", line 1, in <module>
runfile('C:/Users/Z820/Desktop/Python/Fichier_Python/Projet_correlation/Replace Fiji/usebioformas.py', wdir='C:/Users/Z820/Desktop/Python/Fichier_Python/Projet_correlation/Replace Fiji')
File "C:UsersZ820Miniconda3envspy37libsite-packagesspyder_kernelscustomizespydercustomize.py", line 678, in runfile
execfile(filename, namespace)
File "C:UsersZ820Miniconda3envspy37libsite-packagesspyder_kernelscustomizespydercustomize.py", line 106, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Z820/Desktop/Python/Fichier_Python/Projet_correlation/Replace Fiji/usebioformas.py", line 10, in <module>
javabridge.start_vm(run_headless=True)
File "C:UsersZ820Miniconda3envspy37libsite-packagesjavabridgejutil.py", line 314, in start_vm
raise RuntimeError("Failed to start Java VM")
RuntimeError: Failed to start Java VM

如果我尝试第三次启动它,我会收到一条略有不同的错误消息。

有人有办法解决这个问题吗?

我提前感谢你的帮助,

托马斯。

这是JVM的一个限制,您只能使用一次start_vm((。

有关详细信息,请参阅此链接https://github.com/LeeKamentsky/python-javabridge/issues/88

问题类似于此:

https://jpype.readthedocs.io/en/latest/userguide.html#unloading-jvm

卸载JVM

JNI API定义了一个名为destroyJVM((的方法。但是,这种方法不起作用。也就是说,孙的合资企业不允许卸载。因此,在调用shutdownJVM((之后,如果尝试再次调用startJVM((,您将得到一个非特定的例外JPype中没有任何错误(我可以看到(。所以如果孙可以适当地支持它自己,或者如果您将JPype与非SUN JVM(我相信IBM的JVM支持JNI调用,但我不知道他们的destroyJVM是否正常工作(,JPype将是能够利用它。作为写作的时间稳定的Sun JVM为1.4.2_04。

我发现了令人恼火但有效的解决方案:;RuntimeError:无法启动Java VM"注意:这个解决方案只适用于谷歌Colab笔记本电脑,也许其他笔记本电脑也有这个选项,没关系
您只需转到"运行时"选项卡,然后单击"重新启动运行时",它就会重新启动,JVM就会再次工作。在此处输入图像描述

最新更新