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

Python中ImageJ启动失败:CalledProcessError与Java版本问题

问题描述

此前可正常运行的代码:

import imagej

ij = imagej.init()

重启电脑后执行报错:

CalledProcessError: Command '['C:\\path\\to\\java\\bin\\java.exe', '-version']' returned non-zero exit status 1.

完整堆栈追踪:

CalledProcessError                        Traceback (most recent call last)
Input In [11], in <cell line: 3>()
      1 import imagej
----> 3 ij = imagej.init()

File ~\anaconda3\lib\site-packages\imagej\__init__.py:1496, in init(ij_dir_or_version_or_endpoint, mode, add_legacy, headless)
   1493     raise EnvironmentError("Sorry, the interactive mode is not available on macOS.")
   1495 if not sj.jvm_started():
-> 1496     success = _create_jvm(ij_dir_or_version_or_endpoint, mode, add_legacy)
   1497     if not success:
   1498         raise RuntimeError("Failed to create a JVM with the requested environment.")

File ~\anaconda3\lib\site-packages\imagej\__init__.py:1603, in _create_jvm(ij_dir_or_version_or_endpoint, mode, add_legacy)
   1601     sj.config.add_option("-Djava.awt.headless=true")
   1602 try:
-> 1603     if hasattr(sj, "jvm_version") and sj.jvm_version()[0] >= 9:
   1604         # Disable illegal reflection access warnings.
   1605         sj.config.add_option("--add-opens=java.base/java.lang=ALL-UNNAMED")
   1606         sj.config.add_option("--add-opens=java.base/java.util=ALL-UNNAMED")

File ~\anaconda3\lib\site-packages\scyjava\_java.py:140, in jvm_version()
    137 if java is None:
    138     raise RuntimeError(f"No java executable found inside: {p}")
-> 140 version = subprocess.check_output(
    141     [str(java), "-version"], stderr=subprocess.STDOUT
    142 ).decode()
    143 m = re.match('.*version "(([0-9]+\\.)+[0-9]+)', version)
    144 if not m:

File ~\anaconda3\lib\subprocess.py:424, in check_output(timeout, *popenargs, **kwargs)
    421         empty = b''
    422     kwargs['input'] = empty
-> 424 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
    425            **kwargs).stdout

File ~\anaconda3\lib\subprocess.py:528, in run(input, capture_output, timeout, check, *popenargs, **kwargs)
    526     retcode = process.poll()
    527     if check and retcode:
-> 528         raise CalledProcessError(retcode, process.args,
    529                                  output=stdout, stderr=stderr)
    530 return CompletedProcess(process.args, retcode, stdout, stderr)

CalledProcessError: Command '['C:\\Users\\andre\\anaconda3\\Library\\bin\\bin\\java.exe', '-version']' returned non-zero exit status 1.

从报错路径C:\\Users\\andre\\anaconda3\\Library\\bin\\bin\\java.exe可以看出,自动检测的Java路径存在重复的bin目录,导致路径无效,无法执行java -version命令。

解决办法
  • 验证并修复系统Java路径

    1. 打开命令提示符,输入where java,找到有效的Java可执行文件路径(比如C:\Program Files\Java\jdk-xx.x.x\bin\java.exe,或者Anaconda正确路径C:\Users\andre\anaconda3\Library\bin\java.exe)
    2. 检查环境变量:确保JAVA_HOME指向JDK/JRE的根目录,PATH中包含Java的bin目录,且该路径在Anaconda相关路径之前(避免路径冲突)
  • 手动指定imagej的Java路径
    绕过自动检测,直接在代码中指定正确的Java路径:

    import imagej
    import scyjava
    
    # 方式1:指定JDK/JRE根目录
    scyjava.config.add_option('-Djava.home=C:\\Users\\andre\\anaconda3\\Library')
    # 方式2:直接指定java.exe路径
    # scyjava.config.add_option('-Djvm.path=C:\\Users\\andre\\anaconda3\\Library\\bin\\java.exe')
    
    ij = imagej.init()
    
  • 修复Anaconda自带的Java环境
    如果是Anaconda内置的Java出现路径错误,尝试重装相关包:

    conda uninstall openjdk -y
    conda install openjdk -y
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:06