昨天把IDE换到了eclipse上,什么都没改
然后今天启动tomcat后直接访问localhost:8080报了异常(直接使用cmd然后startup启动)
异常信息:
25-Apr-2016 12:20:09.788 SEVERE [http-apr-8080-exec-3] org.apache.coyote.http11.
AbstractHttp11Processor.process Error processing request
java.lang.ClassFormatError: Truncated class file
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at sun.nio.cs.AbstractCharsetProvider.lookup(AbstractCharsetProvider.jav
a:142)
at sun.nio.cs.AbstractCharsetProvider.access$000(AbstractCharsetProvider
.java:45)
at sun.nio.cs.AbstractCharsetProvider$1.next(AbstractCharsetProvider.jav
a:183)
at sun.nio.cs.AbstractCharsetProvider$1.next(AbstractCharsetProvider.jav
a:173)
at java.nio.charset.Charset.put(Charset.java:539)
at java.nio.charset.Charset.access$200(Charset.java:271)
at java.nio.charset.Charset$3.run(Charset.java:581)
at java.nio.charset.Charset$3.run(Charset.java:573)
at java.security.AccessController.doPrivileged(Native Method)
at java.nio.charset.Charset.availableCharsets(Charset.java:572)
at org.apache.tomcat.util.buf.B2CConverter.<clinit>(B2CConverter.java:49
)
at org.apache.catalina.connector.CoyoteAdapter.parsePathParameters(Coyot
eAdapter.java:1095)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAd
apter.java:811)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:513)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp
11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:668)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpo
int.java:2463)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin
t.java:2452)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh
read.java:61)
at java.lang.Thread.run(Thread.java:745)
25-Apr-2016 12:20:09.788 SEVERE [http-apr-8080-exec-4] org.apache.coyote.http11.
AbstractHttp11Processor.process Error processing request
java.lang.NoClassDefFoundError: Could not initialize class org.apache.tomcat.ut
il.buf.B2CConverter
at org.apache.catalina.connector.CoyoteAdapter.parsePathParameters(Coyot
eAdapter.java:1095)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAd
apter.java:811)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:513)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp
11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(
AbstractProtocol.java:668)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpo
int.java:2463)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoin
t.java:2452)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh
read.java:61)
at java.lang.Thread.run(Thread.java:745)
刚大致看了一下tomcat
的源码,按照题主的日志分析是在加载B2CConverter
类的时候,需要执行<clinit>
里面的程序也就是
static {
for (Charset charset: Charset.availableCharsets().values()) {
encodingToCharsetCache.put(
charset.name().toLowerCase(Locale.ENGLISH), charset);
for (String alias : charset.aliases()) {
encodingToCharsetCache.put(
alias.toLowerCase(Locale.ENGLISH), charset);
}
}
}
这段代码,再根据日志分析,是在加载Charset
的时候出现java.lang.ClassFormatError: Truncated class file
类截断异常,估计是加载sun.nio.cs
里面的字符集类报出来的也就是jre/lib/charsets.jar
里面的类。
建议重新编译一下项目,如果还是不行,JDK什么的重新下一遍
java.lang.ClassFormatError: Truncated class file
java.lang.NoClassDefFoundError: Could not initialize class org.apache.tomcat.ut
il.buf.B2CConverter
看上去你的 B2CConverter.class 文件坏掉了,试试重新下载个 tomcat
java.lang.NoClassDefFoundError: Could not initialize class org.apache.tomcat.ut il.buf.B2CConverter
这么明显看不到,类没有导进去啊