2014-12-09 5 views
0

java.lang.NoClassDefError : com.example.androidphp.GmailSender 예외가 발생 com.example.androidphpjava.lang.NoClassDefFoundError가

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("[email protected]", "password"); 

        sender.sendMail("This is Subject", 

         "This is Body", 

         "[email protected]", 

         "[email protected]"); 

       } 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; 

      } 

     }); 

    } 

} 

로그 캣은 프로젝트의 속성과에

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) 
+0

아마도 logcat을 추가하면 도움이 될 것입니다. –

+0

나는 단지 질문을 편집하고 logcat –

+0

속성 -> Java 빌드 경로 -> 주문 및 내보내기 ->를 추가하고 항아리가 선택되었는지 확인하십시오 (해당 클래스가 들어있는 jar 파일 –

답변

0

이동입니다 Java 빌드 경로 -> 순서 및 내보내기 -> 검사하지 않은 경우 해당 클래스가 들어있는 jar 파일을 확인하십시오. 제 경우에는 정상적으로 작동합니다. 덕분에 @Azael

관련 문제