欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 百度智能云通用文字识别(标准版)- java.lang.NoSuchFieldError: Companion

百度智能云通用文字识别(标准版)- java.lang.NoSuchFieldError: Companion

2025/2/23 15:09:08 来源:https://blog.csdn.net/Klhz555/article/details/141299852  浏览:    关键词:百度智能云通用文字识别(标准版)- java.lang.NoSuchFieldError: Companion

需求环境

ORC识别图片信息 参考百度示例

百度智能云API文档通用文字识别

官方示例

package baidu.com;import okhttp3.*;
import org.json.JSONObject;import java.io.*;/*** 需要添加依赖* <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->* <dependency>*     <groupId>com.squareup.okhttp3</groupId>*     <artifactId>okhttp</artifactId>*     <version>4.12.0</version>* </dependency>*/class Sample {public static final String API_KEY = "7bfV7EunI2ZjzcSLGdC59wht";public static final String SECRET_KEY = "uKZNGVepDBhhUmxwcu53M5e2CpifUb4p";static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();public static void main(String []args) throws IOException{MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");RequestBody body = RequestBody.create(mediaType, "");Request request = new Request.Builder().url("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" + getAccessToken()).method("POST", body).addHeader("Content-Type", "application/x-www-form-urlencoded").addHeader("Accept", "application/json").build();Response response = HTTP_CLIENT.newCall(request).execute();System.out.println(response.body().string());}/*** 从用户的AK,SK生成鉴权签名(Access Token)** @return 鉴权签名(Access Token)* @throws IOException IO异常*/static String getAccessToken() throws IOException {MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY+ "&client_secret=" + SECRET_KEY);Request request = new Request.Builder().url("https://aip.baidubce.com/oauth/2.0/token").method("POST", body).addHeader("Content-Type", "application/x-www-form-urlencoded").build();Response response = HTTP_CLIENT.newCall(request).execute();return new JSONObject(response.body().string()).getString("access_token");}
}

异常信息

项目引入okhttp-4.12.0.jar 包后,还需引入okio-1.12.0.jar 配置完后测试出现下方异常

Exception in thread "main" java.lang.NoSuchFieldError: Companionat okhttp3.internal.Util.<clinit>(Util.kt:70)at okhttp3.OkHttpClient.<clinit>(OkHttpClient.kt:1073)at com.yc.strayanimals.baidu.Sample.<clinit>(Sample.java:26)

在这里插入图片描述

官网在线调试正常响应,怀疑SDK包引用冲突 即okio.jar 的版本不匹配

报错解释

java.lang.NoSuchFieldError: Companion 错误通常发生在Java环境中,当程序尝试访问一个类中不存在的字段时会抛出。在Kotlin语言中,Companion是一个关键字,用于定义一个伴生对象。如果你的代码中出现这个错误,可能是因为:

  • 编译的类路径不一致:你可能在运行时使用了一个与编译时不同的类版本,其中不包含Companion字段。
  • 依赖冲突:项目中可能包含有不同版本的依赖库,导致运行时类路径上的类与编译时使用的类不匹配。

解决思路

  • 确保所有的类都是最新编译的,并且运行时的类路径与编译时一致。

  • 检查项目的依赖管理文件(如pom.xml或build.gradle),确保没有版本冲突,并且所有的依赖都是最新的或者是兼容的版本。

  • 如果使用了构建工具(如Maven或Gradle),尝试清理并重新构建项目。

  • 如果在使用IDE,尝试清理并重新导入项目。

  • 如果问题依然存在,检查是否有旧版本的类文件残留在环境中,如果有,删除它们。

根本原因

com.squareup包下的okio.jarokhttp3版本不兼容

解决办法

1、和冲突的包换个位置,用高版本的okio包即可

2、或者添加依赖冲突的sdk的时候排除指定包即可

完美处理

okio.jar版本切换成2.4.3 测试成功

参考博主

Maven方案可参考博主

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词