java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Server/Request
Linux服务器上,将本地编译好的文件上传后,Tomcat启动时报错:
Exception in thread "Thread-2" java.lang.ClassFormatError:
Illegal UTF8 string in constant pool in class file Server/Request
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
at Server.Test.<init>(Test.java:13)
at Server.HttpServer.startServer(HttpServer.java:80)
at Server.HttpServer.run(HttpServer.java:27)
at java.lang.Thread.run(Thread.java:662)
看到这个报错我特别诧异,根据异常提示,Server包下的Request类中某个常量池常量不是合法的UTF-8字符常量
通过异常栈的信息可以看出这是一个类加载器加载类文件过程中(WebappClassLoader),解析class文件时抛出的异常,问题的原因是class文件的格式不符合定义,导致文件解析失败(在Test对象的初始化方法中会首先初始化Request对象,所以可以在异常栈中看到Test.<init>)
Test test = new Test(socket);
Thread t = new Thread(test);
t.start();
public Test(Socket socket) throws Exception{
this.socket = socket;
request = new Request();
}
这样就定位了问题的原因出现在Request类的class文件上,使用javap命令分析一下这个文件
[hadoop@hadoop Server]# javap -verbose Request
Error: error while reading constant pool for Request: unexpected tag at #8: 110
这样就确定了服务器上的这个类文件就是有问题的:常量池中的第8个常量无法解析
本地运行时这个类是没有问题的,那么本地编译的Request.class文件肯定是没问题的,虽然Linux服务器上用的是JDK1.6_45_x64而我本地使用的JDK1.5_15_x86,我认为问题的原因不在于JDK的版本,因为编译版本小于运行版本
在本地使用javap命令查看编译后的文件
E:\Users\...>javap -verbose Request > e:\1.txt
看看1.txt文件中保存的解析结果,常量池中的第八个常量也是没有问题的:
Compiled from "Request.java"
public class Server.Request extends java.lang.Object
SourceFile: "Request.java"
minor version: 0
major version: 49
Constant pool:
const #1 = class #2; // Server/Request
const #2 = Asciz Server/Request;
const #3 = class #4; // java/lang/Object
const #4 = Asciz java/lang/Object;
const #5 = Asciz CRLF;
const #6 = Asciz Ljava/lang/String;;
const #7 = Asciz ConstantValue;
const #8 = String #9; // \r\n
......
那么就确定了问题发生在本地文件上传至服务器的过程中
使用rz -b命令代替rz命令后,Tomcat运行正常
java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Server/Request的更多相关文章
- java.lang.ClassFormatError: Unknown constant tag 0 in class file
在通过文件上传之后,运行java程序,突然发现这么一个错误:java.lang.ClassFormatError: Unknown constant tag 0 in class file,通过网上查 ...
- java.lang.ClassFormatError: Extra bytes at the end of class file
在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错: java.lang.ClassFormatError: Extra byt ...
- HTTP错误:java.lang.IllegalArgumentException: Illegal character in scheme at index 0: http://xxxxxx
读取T卡文件里的域名,HTTP请求出现如下错误 java.lang.IllegalArgumentException: Illegal character in scheme at index 0: ...
- java.lang.ClassFormatError
Error occurred during initialization of VMjava.lang.ClassFormatError: Unknown constant tag 26 in cla ...
- java.lang.ClassFormatError Duplicate field name&signature in class file XXXXXX【转】
本文转载自:https://blog.csdn.net/ylchou/article/details/7739742 2012-7-5 15:06:25org.apache.catalina.core ...
- java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法
今天在写智能机器人问答实现的时候遇到了一个问题,就是我发送消息不能输入空格 给我报了一个错误java.lang.IllegalArgumentException: Illegal character ...
- Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query at index 189......
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in query ...
- 阿里巴巴 fastjson-1.2.12.jar json解析异常java.lang.ClassFormatError: Invalid method Code length 66865 in class file com/alibaba/fastjson/serializer/ASMSerializer_6_UserKdlb
承接上篇:fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:1 ...
- java.lang.IllegalArgumentException: Illegal character in query at index 261
在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentExcept ...
随机推荐
- Selenium-Python学习——通过XPath定位元素
用Xpath定位元素的方法总是记不住,经常要翻出各种文档链接参考,干脆把需要用到的内容整到这个笔记中方便查找. Xpath是在XML文档中定位节点的语言.使用 XPath 的主要原因之一是当想要查找的 ...
- C# 检测机器是否有声卡设备
有时候我们的程序需要进行音频的播放,则我们首先需要判断机器是否有声卡能够进行音频的播放.在网上找了一下没有发现太多关于如何检机器是否有声卡的例子.我在看了一些文档后自己写了一个小测试程序,如果机器装有 ...
- 【C/C++运行时库】 /MT /MTd /MD /MDd对C/C++运行库的影响
欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3146937.html 测试VS中[项目属性]-[C/C++]-[代码生成]选项中的[运行库]- [ /MT, ...
- MSP430的看门狗常见用法以及中断函数的书写方法
今天下午看了一下MSP430的看门狗的基本用法 看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用 示例代码:用看门狗定时器使一个led闪烁 #inclu ...
- 点亮一个led
1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...
- hive的使用和深化理解
1.hive中的数据最终是存放在hdfs上的 2.hive本身不是关系型数据库,hive执行sql语句时会把sql语句翻译成mapreduce程序,然后将mapreduce程序提交到hadoop集群中 ...
- mvc5入门,经典教程。。
转子 http://www.yanjinnan.com/archives/category/tech/efmvc ASP.NET MVC 5 一 入门 发表于2013 年 8 月 12 日由颜晋南 ...
- 手机模拟器 上安装与卸载apk
一.安装apk 将apk放到sdk安装目录下的platform-tools(不同版本的sdk也可能是tools) 1.adb kill-server2.adb start-server3.adb re ...
- Read Asia Embedded fell
first and foremost, 很久没写了,心痒了,手贱了,于是乎在这一刻心静时,积攒的思绪开始回放了,惊世Copy-on-write之文随之面世了; 臭毛孩子拉的 屎 特臭,小毛孩子前途黯淡 ...
- Java管道流PipedStream
管道读取流和管道写入流可以像管道一样对接上,管道读取流就可以读取管道写入流写入的数据.需要注意的是需要加入多线程技术,因为单线程,先执行read,会发生死锁,因为read方法是阻塞式的,没有数据的re ...