奇异的ClassCastException问题.

lzheng2001 2007-11-19 04:29:32
import javax.mail.internet.*;
import javax.mail.internet.MimeMultipart;
//mimeMess 为 MimeMessage 类型
if(mimeMess.isMimeType(MULTIPART)){
MimeMultipart mmp=(MimeMultipart) mimeMess.getContent();
....
}

在windows下运行代码完全没有问题,可是把代码放到Linux上,每次运行
MimeMultipart mmp=(MimeMultipart) mimeMess.getContent();
这句总提示说ClassCastException。 我把class的信息打印出来,明明就是 MimeMultipart 对象,可就是转换不了. 在windows下运行就没有问题.
请问有谁遇到过类似情况,是什么原因??

...全文
130 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzheng2001 2008-01-02
  • 打赏
  • 举报
回复
问题解决!
关键字:Linux,tomcat5.5,javamail
解决方法:把web-inf/lib 下的mail.jar 包,放到tomcat目录下的common/lib目录下即可.

原因:听说tomcat自带了javamail,在linux下(windows下没这个问题),如果把mail.jar放到本web项目下,tomcat会引起class版本错误.
beiouwolf 2007-11-28
  • 打赏
  • 举报
回复
LINUX下运行,你的JAVA命令最好包含完整路径
因为LINUX本身都带有低版本的JRE,如果直接使用JAVA命令,一般来说都是指向系统的JRE上
LINUX下安装的JDK好像不会自动配置系统变量的,这点要注意
cocosunshine 2007-11-28
  • 打赏
  • 举报
回复
那就说明你import包不正确,你最好check一下。
Yanbin_Q 2007-11-28
  • 打赏
  • 举报
回复
在Linux下转换前打印出实际类的全限名出来
lzheng2001 2007-11-28
  • 打赏
  • 举报
回复
楼上说的有道理,问题是我没有发现有同名的class. 只有一个mail.jar包, 如果不要这个jar包,则找不到class了.
maquan 2007-11-26
  • 打赏
  • 举报
回复
可能有这样的情况:两个 class,名字完全相同,但是来自于不同的 ClassLoader,此时在 JVM 里,是把它们当作不同的 class 来看待的。

如果你的一个 object 是通过其中一个 class 创建的,而在 class cast 的时候,引用到的是另外一个 class,就会出现你说的现象。这种情况的确比较诡异。
lzheng2001 2007-11-21
  • 打赏
  • 举报
回复
转了Multipart 还是有错误. 真不知是什么原因。jdk是同一版本的了, 不知会不会是mail.jar包版本问题.
lzheng2001 2007-11-20
  • 打赏
  • 举报
回复
我试了把 MimeMultipart 换成它的父类 Multipart 在linux下运行通过.
但无论如何,这个类肯定就是MimeMultipart类. 不知为何MimeMultipart mmp=(MimeMultipart) mimeMess.getContent(); 会出错
huoyin 2007-11-19
  • 打赏
  • 举报
回复
从tomcat的启动脚本中查看java_home指向哪里
lzheng2001 2007-11-19
  • 打赏
  • 举报
回复
linux 下如果知道tomcat使用的jdk版本?
huoyin 2007-11-19
  • 打赏
  • 举报
回复
是不是你的windows和linux的jdk版本不一致,最有可能的是它们包含不同版本的MimeMultipart

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧