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下运行就没有问题.
请问有谁遇到过类似情况,是什么原因?? 

解决方案 »

  1.   

    是不是你的windows和linux的jdk版本不一致,最有可能的是它们包含不同版本的MimeMultipart
      

  2.   

    linux 下如果知道tomcat使用的jdk版本? 
      

  3.   

    从tomcat的启动脚本中查看java_home指向哪里
      

  4.   

    我试了把 MimeMultipart 换成它的父类 Multipart 在linux下运行通过.  
    但无论如何,这个类肯定就是MimeMultipart类. 不知为何MimeMultipart   mmp=(MimeMultipart)   mimeMess.getContent(); 会出错
      

  5.   

    转了Multipart 还是有错误. 真不知是什么原因。jdk是同一版本的了, 不知会不会是mail.jar包版本问题. 
      

  6.   

    可能有这样的情况:两个 class,名字完全相同,但是来自于不同的 ClassLoader,此时在 JVM 里,是把它们当作不同的 class 来看待的。如果你的一个 object 是通过其中一个 class 创建的,而在 class cast 的时候,引用到的是另外一个 class,就会出现你说的现象。这种情况的确比较诡异。
      

  7.   

    楼上说的有道理,问题是我没有发现有同名的class. 只有一个mail.jar包, 如果不要这个jar包,则找不到class了. 
      

  8.   

    在Linux下转换前打印出实际类的全限名出来
      

  9.   

    那就说明你import包不正确,你最好check一下。
      

  10.   

    LINUX下运行,你的JAVA命令最好包含完整路径
    因为LINUX本身都带有低版本的JRE,如果直接使用JAVA命令,一般来说都是指向系统的JRE上
    LINUX下安装的JDK好像不会自动配置系统变量的,这点要注意
      

  11.   

    问题解决! 
    关键字:Linux,tomcat5.5,javamail
    解决方法:把web-inf/lib 下的mail.jar 包,放到tomcat目录下的common/lib目录下即可.原因:听说tomcat自带了javamail,在linux下(windows下没这个问题),如果把mail.jar放到本web项目下,tomcat会引起class版本错误.