java.lang.NoClassDefFoundError

时间:2014-12-09 17:05:42

标签: android eclipse email

在模拟器上运行时发生java.lang.NoClassDefError : com.example.androidphp.GmailSender异常,而两个类都位于com.example.androidphp的同一个包中

package com.example.androidphp;

import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;


public class UserPage extends ActionBarActivity {

    Button button;

    TextView txtvw;

    String text;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.userpage);

        txtvw = (TextView) findViewById(R.id.TextView01);

        button = (Button) findViewById(R.id.save);

        text = "";

        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    GmailSender sender = new GmailSender("abc@gmail.com", "password");

                    sender.sendMail("This is Subject",

                        "This is Body",

                        "abc@gmail.com",

                        "xyz@ymail.com");

                } catch (Exception e) {

                    Log.e("SendMail", e.getMessage(), e);

                }

            }
        });

    }



    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


GmailSender.java is



package com.example.androidphp;

import javax.activation.DataHandler;

import javax.activation.DataSource;

import javax.mail.Message;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.Security;

import java.util.Properties;

public class GmailSender extends javax.mail.Authenticator {

    private String mailhost = "smtp.gmail.com";

    private String user;

    private String password;

    private Session session;

    static {

        Security.addProvider(new com.provider.JSSEProvider());
    }

    public GmailSender(String user, String password) {

        this.user = user;

        this.password = password;

        Properties props = new Properties();

        props.setProperty("mail.transport.protocol", "smtp");

        props.setProperty("mail.host", mailhost);

        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.port", "465");

        props.put("mail.smtp.socketFactory.port", "465");

        props.put("mail.smtp.socketFactory.class",

            "javax.net.ssl.SSLSocketFactory");

        props.put("mail.smtp.socketFactory.fallback", "false");

        props.setProperty("mail.smtp.quitwait", "false");

        session = Session.getDefaultInstance(props, this);
    }

    protected PasswordAuthentication getPasswordAuthentication() {

        return new PasswordAuthentication(user, password);
    }

    public synchronized void sendMail(String subject, String body, String sender, String recipients)

    throws Exception {

        try {

            MimeMessage message = new MimeMessage(session);

            DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(),

                "text/plain"));

            message.setSender(new InternetAddress(sender));

            message.setSubject(subject);

            message.setDataHandler(handler);

            if (recipients.indexOf(',') > 0)

            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));

            else message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));

            Transport.send(message);

        } catch (Exception e) {

        }

    }

    public class ByteArrayDataSource implements DataSource {

        private byte[] data;

        private String type;

        public ByteArrayDataSource(byte[] data, String type) {

            super();

            this.data = data;

            this.type = type;
        }

        public ByteArrayDataSource(byte[] data) {

            super();

            this.data = data;
        }

        public void setType(String type) {

            this.type = type;
        }

        public String getContentType() {

            if (type == null)

            return "application/octet-stream";

            else return type;
        }


        public InputStream getInputStream() throws IOException {

            return new ByteArrayInputStream(data);
        }

        public String getName() {

            return "ByteArrayDataSource";
        }

        public OutputStream getOutputStream() throws IOException {

            throw new IOException("Not Supported");

        }

    }

}



and JSSEProvider





package com.provider;

import java.security.Provider;

import java.security.AccessController;

public class JSSEProvider extends Provider {

    /**

     * 

     */
    private static final long serialVersionUID = 1L;

    public JSSEProvider() {

        super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");

        AccessController.doPrivileged(new java.security.PrivilegedAction < Void > () {

            public Void run() {

                put("SSLContext.TLS",

                    "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");

                put("Alg.Alias.SSLContext.TLSv1", "TLS");

                put("KeyManagerFactory.X509",

                    "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");

                put("TrustManagerFactory.X509",

                    "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");

                return null;

            }

        });

    }

}

logcat是

 FATAL EXCEPTION: main

  Process: com.example.androidphp, PID: 1992

 java.lang.NoClassDefFoundError: com.example.androidphp.GmailSender

at com.example.androidphp.UserPage$1.onClick(UserPage.java:104)

at android.view.View.performClick(View.java:4438)

at android.view.View$PerformClick.run(View.java:18422)

at android.os.Handler.handleCallback(Handler.java:733)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:136)

at android.app.ActivityThread.main(ActivityThread.java:5017)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:515)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

转到项目的属性,然后转到Java Built path-&gt;订单和出口 - &gt;并检查包含该类的jar文件(如果未选中) 在我的情况下它工作正常 感谢@Azael