在java中获取ClassCastException

ram*_*esh 1 java exception classcastexception

嗨,我得到以下异常

线程"main"中的异常java.lang.ClassCastException:javax.mail.util.SharedByteArrayInputStream无法强制转换为javax.mail.Multipart

我在Eclipse IDE中没有得到任何编译异常,但是当我尝试构建项目时,我得到了这个异常.

在构建项目之后,我通过java -jar运行项目,因此它不满足if(内容实例的Multipart)条件,但是当我从Eclipse IDE运行时它工作正常.任何指针都会对我有很大帮助

从eclipse IDE我得到的是megssage.getContent()为javax.mail.internet.MimeMultipart@1dc0e7a但是当使用jar文件运行时我得到的内容为javax.mail.util.SharedByteArrayInputStream@2f0d54

请你告诉我他们之间有什么区别.

修改后的代码是:

 InputStream inStream = null;
    if(!message.getContentType().contains("text/plain")){
        Object content = message.getContent();          
        if (message.isMimeType("multipart/*")) {  
            //message.isMimeType("multipart/*")||
            Multipart multipart = (Multipart) content;
            for (int j = 0; j < multipart.getCount(); j++) {
                BodyPart bodyPart = multipart.getBodyPart(j);
                inStream = bodyPart.getInputStream();
                fileName=bodyPart.getFileName();
                } 
        }
        else{
        System.out.println("content not instance of multipart");    
        }`enter code here`  
Run Code Online (Sandbox Code Playgroud)

请任何人帮助我解决这个问题..

提前致谢...

wkl*_*wkl 5

message.getContent()返回javax.mail.util.SharedByteArrayInputStream此处,但SharedByteArrayInputStream不能转换为Multipart实例,因为您可能不一定有多部分消息.

你可以检查它的mimetype是否是一个多部分:

if (message.isMimeType("multipart/*") {
    Multipart mp = (Multipart)message.getContent();
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

或者你可以做...的实例

if (message.getContent() instanceof Multipart) {
    Multipart mp = (Multipart)message.getContent();
    // more
}
Run Code Online (Sandbox Code Playgroud)