首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaMail: Java.awt.datatransfer.Transferable不存在

JavaMail: Java.awt.datatransfer.Transferable不存在
EN

Stack Overflow用户
提问于 2017-06-07 13:49:48
回答 2查看 6.1K关注 0票数 11

我本来不想问这个问题的,但是我没有解决这个问题的办法!

我在从IMAP服务器接收消息时遇到了问题。

错误上写着“引起: java.lang.ClassNotFoundException:没有在路径上找到类"java.awt.datatransfer.Transferable”.“这是我的密码:

代码语言:javascript
复制
enter String test(){
    String all="";
    try{
        class Runner extends AsyncTask<Object, String, String> {
            @Override
            protected String doInBackground(Object... params) {
                Looper.prepare();
                String all ="";
                try{
                    Message[] msgs = ReceiveMail("imap.gmail.com","993","USER@gmail.com","PASS"); // After passing this line, error logging says error is in this line!
                    for(Message m: msgs){
                        all+=m.getSubject()+"\n"+m.getContent().toString()+"\n\n"; // Error shows here, but popups above
                    }
                    return all;
                }catch (Exception e){
                    e.printStackTrace();
                }
                Looper.loop();
                return all;
            }
        }
        Runner r = new Runner();
        all = r.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this).get();
    }catch (Exception e){
        e.printStackTrace();
    }
    return all;
}
private Message[] ReceiveMail(String host,String port,String user,String pass){
    try{
        Properties props = new Properties();
        props.setProperty("mail.store.protocol", "imaps");
        props.setProperty("mail.imaps.host", host);
        props.setProperty("mail.imaps.port", port);
        props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.imaps.socketFactory.fallback", "false");
        Session imapSession = Session.getInstance(props);
        Store store = imapSession.getStore("imaps");
        store.connect(host, user, pass);
        Folder inbox = store.getFolder("Inbox");
        inbox.open(Folder.READ_ONLY);
        return inbox.getMessages();
    }catch (Exception e){
        e.printStackTrace();
        //log_all("ReceiveMail function: "+e.getMessage());
    }
    return null;
}

有什么问题吗?

备注当我不使用AsyncTask错误时,出现“主线程中的网络”。

溶液

下载这些并将它们作为库添加。

javax.*module settings的依赖项选项卡中删除。

这会解决问题的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-07 13:54:42

因为它找不到某个类,也许您缺少了一个外部jar?

编辑

您可以使用JavaMail API来处理电子邮件任务。JavaMail API可在JavaEE包中使用,其jar可供下载。遗憾的是,它不能直接在Android应用程序中使用,因为它使用的是在Android中完全不兼容的AWT组件。(这就是为什么你会犯这个错误)

您可以在以下位置找到JavaMail的Android端口:http://code.google.com/p/javamail-android/

将jars添加到应用程序并使用SMTP方法

票数 2
EN

Stack Overflow用户

发布于 2017-06-07 19:49:30

JavaMail API参考实现版本1.5.5及更高版本构建了对安卓的支持,并包含了对OAuth2的支持。根据文件:

Android不提供与Java兼容的运行时,因此无法运行标准的JavaMail发行版。相反,安卓有一个特殊版本的JavaMail。这个特殊版本的JavaMail依赖于JavaBeans激活框架的一个特殊版本。 您可以通过为您的安卓应用程序在build.gradle文件中添加以下内容来尝试此版本:

代码语言:javascript
复制
 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.6'
     compile 'com.sun.mail:android-activation:1.5.6'
 }
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44414569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档