java.lang.NoSuchFieldError : DEF_CONTENT_CHARSET 错误

标签 java jvm onos

我正在尝试运行 Java 程序,但出现以下运行时错误。错误如下所示。

Exception in thread "main" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
    at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175)
    at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158)
    at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448)
    at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309)
    at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466)
    at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
    at net.floodlightcontroller.core.internal.PacketStreamerClient.registerForPackets(PacketStreamerClient.java:90)
    at net.floodlightcontroller.core.internal.PacketStreamerClient.main(PacketStreamerClient.java:51)

现在我添加到类路径中的文件如下。

export CLASSPATH=$(JARS=(./lib/*.jar); IFS=:; echo "${JARS[*]}")
export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar
export CLASSPATH=$CLASSPATH:~/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar
export CLASSPATH=$CLASSPATH:~/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
export CLASSPAHT=$CLASSPATH:~/ms_thesis/ONOS/httpcore-4.1.jar
#export CLASSPATH=$CLASSPATH:~/ms_thesis/ONOS/lib/httpclient-4.2.jar
export CLASSPATH=$CLASSPATH:~/google-gson-2.2.4/gson-2.2.4.jar

“主要”java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET 的原因是什么

我下载了 http-core-4.1-alpha 因为它是包含 org/apache/http/params/SyncBasicHttpParams 类 来自 findjar.com。所以那个版本的http-core是不可协商的。如何找到与那个版本的http-core兼容的httpclient版本?

最佳答案

您的类路径中有两个不同版本的 httpcore:

~/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar
~/ms_thesis/ONOS/httpcore-4.1.jar

...虽然根据您的问题,第二个实际上导出为 CLASSPAHT。我们也不知道您的 lib 目录中有什么 - 甚至可能有 更多 版本。

除了一个被注释掉之外,还有两个版本的 httpclient。我建议您解决所有这些问题,以便您使用这两个库的最新版本。我的猜测是,实际获取的是一个版本的 httpclient 和一个版本的 httpcore,它们不兼容。或者,或者只是在 httpcore 中,有一些 list 条目是从一个 jar 文件中提取的,但是当一个类被请求时,它正在获取另一个。

无论哪种方式,在类路径中同时拥有同一个库的两个版本都是一个坏主意。

您还应该确保您使用的 httpcore 版本适合您使用的 httpclient 版本。例如,我刚刚下载了最新版本的 httpclient (4.2.5),它使用的是 httpcore 4.2.4。如果您尝试将 httpclient-4.2 与 httpcore-4.1 一起使用,那可能不兼容。

关于java.lang.NoSuchFieldError : DEF_CONTENT_CHARSET 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246979/

相关文章:

java - 如何修复 org.osgi.framework.BundleException

java - XSD 是否允许同时使用 simpleContent 和 complexContent?

java类具有不同的参数作为方法的参数

java - Java 中 JSON 未知的字符串

Java 从主函数调用打印方法并使用来自另一个单独方法的数据

java - 线程和枚举优化

java - 在进行堆转储后,如何在 OutOfMemoryError 上重启 JVM?

java - JVM 垃圾收集突然占用大量 CPU