【问题标题】:JavaMail: Java.awt.datatransfer.Transferable doesn't exist [duplicate]JavaMail:Java.awt.datatransfer.Transferable 不存在 [重复]
【发布时间】:2017-06-08 21:27:38
【问题描述】:

我不打算提出问题,但我没有解决这个问题!
我从 IMAP 服务器接收消息时遇到问题。
错误说“引起:java.lang.ClassNotFoundException:在路径上找不到类“java.awt.datatransfer.Transferable”......”这是我的代码:

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 时出现“主线程中的网络”错误。

解决方案
下载 these 并将它们添加为库。
module settings 的依赖项选项卡中删除 javax.*
这样就解决了。

【问题讨论】:

  • 显然,您正在使用一些不适用于 Android 的库,因为它是为标准 Java SE 或 Java EE 编写的。
  • 1.我不认为 AWT 包含在 Android 中。 2. Java.awt.datatransfer 用于在 java awt/swing 应用程序中拖放。你做了什么得到这样的依赖???
  • @CommonsWare 我没有使用任何外部库。仅在依赖项选项卡中可用 -> 库依赖项!
  • @Axel 我不太确定我做了什么来得到它。我只复制了其他一些已回答并批准的问题的代码,但我们到了!
  • “我没有使用任何外部库”——是的,你是。 “只是依赖项选项卡中的一次可用 -> 库依赖项!” -- 这些是外部库。

标签: java android jakarta-mail


【解决方案1】:

JavaMail API Reference Implementation 1.5.5 版及更高版本已内置对Android 的支持,并包括对OAuth2 的支持。 根据文档:

Android 不提供 Java 兼容运行时,因此无法运行标准 JavaMail 分发。相反,Android 可以使用特殊版本的 JavaMail。这个特殊版本的 JavaMail 依赖于特殊版本的 JavaBeans Activation Framework。

您可以通过将以下内容添加到您的 Android 应用程序的 build.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.6'
     compile 'com.sun.mail:android-activation:1.5.6'
 }

【讨论】:

  • JavaMail的当前版本是1.5.6。
【解决方案2】:

由于它没有找到某个类,也许您缺少一个外部 jar?

编辑

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

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

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

【讨论】:

  • 接收不发送!
  • 这是真正的答案。将它们添加到 libs 文件夹(或任何地方)并将它们添加为库解决了它。谢谢^^
  • 我收到重复的类错误,我不知道为什么:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 2011-12-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多