Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java.lang.NoClassDefFoundError-JavaMail_Java_Android - Fatal编程技术网

Java.lang.NoClassDefFoundError-JavaMail

Java.lang.NoClassDefFoundError-JavaMail,java,android,Java,Android,我的主活动中有一个线程,它将创建类SendMail package Logic; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; import javax.

我的主活动中有一个线程,它将创建类
SendMail

package Logic;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import android.util.Log;

public class SendMail {

String from;
String to;
String subject;
String bodyText;
String fileName;

public SendMail(String to, String fileName, String PCN) {

    this.to = to;
    this.fileName = fileName;
    this.from = "Hello@gmail.com";
    this.bodyText = "FILE";
    this.subject = PCN;
}

public void sendMailWithAttatchment() {

    Properties properties = new Properties();
    properties.put("mail.smtp.host", "IP_ADDRESS");
    properties.put("mail.smtp.port", "25");
    Session session = Session.getDefaultInstance(properties, null);

    MimeMessage message = new MimeMessage(session);

    try {

        message.setFrom(new InternetAddress(from));

        message.setRecipient(Message.RecipientType.TO, new InternetAddress(
                to));
        message.setSubject(subject);
        message.setSentDate(new Date());

        MimeBodyPart messagePart = new MimeBodyPart();
        messagePart.setText(bodyText);

        MimeBodyPart attachmentPart = new MimeBodyPart();

        FileDataSource fileDataSource = new FileDataSource(fileName) {
            @Override
            public String getContentType() {
                return "application/octet-stream";

            }
        };

        attachmentPart.setDataHandler(new DataHandler(fileDataSource));
        attachmentPart.setFileName(fileDataSource.getName());

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messagePart);
        multipart.addBodyPart(attachmentPart);
        message.setContent(multipart);
        Transport.send(message);
    } catch (AddressException e) {
        Log.e("ADDRESS_EXCEPTION: ", e.getMessage());
    } catch (MessagingException e) {
        Log.e("MESSAGING_EXCEPTION: ", e.getMessage());
    }
}
}

但是编译器抛出一个异常:“Java.lang.NoClassDefFoundError”。javax.activation.Datahandler

我已经读过这个线程:
.jar文件
javamail.jar
javax.activation.jar
位于我的
libs
文件夹下,但是即使我清理了项目,这也会引发异常

有什么想法吗

以下是引发的异常:

08-07 10:19:49.870: E/AndroidRuntime(17736): java.lang.NoClassDefFoundError: javax.activation.DataHandler
08-07 10:19:49.870: E/AndroidRuntime(17736):    at javax.mail.internet.MimeBodyPart.setContent(MimeBodyPart.java:647)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:892)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:680)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:668)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at sendMailWithAttatchment(SendMail.java:56)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at sendMailWithAttatchment(SendMail.java:56)
08-07 10:19:49.870: E/AndroidRuntime(17736):    at CreateNistFile(MyActivity.java:530)

是的,这是因为你的.jar文件没有正确导入。只要遵循我现有的原则,它肯定会对你有所帮助。下面的快照很重要(它通知其他jar文件应该与此图像类似)-


重要的一点是,每当您想
Java.lang.NoClassDefFoundError
exception时,上面一个异常就是处理这个问题的解决方案。

如果您使用的是eclipse,右键单击项目>选择属性>Java构建路径>库>添加JAR并添加JAR。然后清理项目

Android不完全兼容Java,有一个javamail Android项目将javamail支持添加到Android应用程序中


确保您从这里下载并添加到构建路径所有3个JAR

java为android引入javaMail的新方式:

您只需在gradle中添加这些行:

 android {
     packagingOptions {
         pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
     }
 }

 repositories { 
     jcenter()
     maven {
         url "https://maven.java.net/content/groups/public/"
     }
 }

 dependencies {
     compile 'com.sun.mail:android-mail:1.5.5'
     compile 'com.sun.mail:android-activation:1.5.5'
 }
并且像你一样发送smtp邮件。。。
祝你好运。

我已经做到了,事实上这不是我想要的。你的答案太明显了。@TobiasMoeThorstensen大部分时间都能解决我的问题,所以我只是想帮忙。没问题。谢谢你的回答,但这对我不起作用。在抛出异常之前,我得到了以下调试信息:解析Ljavax/activation/DataHandler失败;接口272'Ljava/awt/datatransfer/Transferable;'你是不是在说不,我遵循这个教程:我不想在手机上有任何用户交互,也不想有任何已安装电子邮件客户端的弹出窗口。邮件应包含主题、正文和附件。现在,在出现异常后,您可以发布完整的
LogCat
跟踪吗?@TobiasMoeThorstensen是的,
.jar
文件没有正确导入。你试过我现有的答案了吗。