我正在尝试运行 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
“main”java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET 的原因是什么
我下载了http-core-4.1-alpha
因为那是包含的罐子org/apache/http/params/SyncBasicHttpParams class
来自 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
目录 - 甚至可能有more各地版本。
httpclient 也有两个版本,只是其中一个被注释掉了。我建议你把这一切都整理好,这样你就可以only使用两个库的最新版本。我的猜测是,实际获取的是一种版本的 httpclient 和一种版本的 httpcore,并且它们不兼容。要么是这样,要么只是在 httpcore 中,从一个 jar 文件中获取了一些清单条目,但是当请求一个类时,它会获取另一个。
无论哪种方式,在类路径中同时拥有同一库的两个版本都是一个坏主意。
您还应该确保您使用的 httpcore 版本适合您使用的 httpclient 版本。例如,我刚刚下载了最新版本的 httpclient (4.2.5),它使用 httpcore 4.2.4。如果您尝试将 httpclient-4.2 与 httpcore-4.1 一起使用,则可能不兼容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)