我正在尝试运行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,因为它是其中包含的jar
来自findjar.com的org/apache/http/params/SyncBasicHttpParams class。因此该版本的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中,从一个jar文件中提取了一些 list 条目,但是当要求一个类获取另一个 list 时,就会出现。

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

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

08-26 01:59