我试图创建一个Java Swing(与Ant)应用程序发送电子邮件到所需的地址(我的第一次)。应用程序成功构建,但是当我点击按钮发送电子邮件时,我得到了很多不同的错误消息,第一个是java.lang.NoClassDefFoundError: javax/activation/DataSource .发件人电子邮件是新的,我没有将其与电话号码相关联(我被告知它可能导致问题)。我还已经将mail.jar添加到项目库中。catch JOptionPane也没有打印任何错误,所以我很难弄清楚这一点。我已经附上了代码以及错误的截图。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String toEmail= "email1";//Changed emails for securityPurposes String fromEmail = "email2"; String fromEmailPassword="Password"; String subject="This is the subject"; Properties properties = new Properties(); properties.put("mail.smtp.auth","true"); properties.put("mail.smtp.starttls.enable","true"); properties.put("mail.smtp.host","smtp.gmail.com"); properties.put("mail.smtp.port","587"); Session session=Session.getDefaultInstance(properties,new >javax.mail.Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication(fromEmail,fromEmailPassword); } }); try{ MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(fromEmail)); message.addRecipient(Message.RecipientType.TO,new >InternetAddress(toEmail)); message.setSubject(subject); message.setText("Hello"); Transport.send(message); } catch(Exception ex){ JOptionPane.showMessageDialog(null, ex); } }
我已经找过了,但没有发现任何类似的案例或解决方案。
在Java 11中,所有所谓的"企业";模块从JDK和JRE中删除。这包括像JAXB这样的api,也包括Java激活框架。这是JavaMail所需要的,但是您的应用程序缺少它(如错误消息所示)。
添加这个依赖:https://mvnrepository.com/artifact/jakarta.activation/jakarta.activation-api/1.2.2。确保远离版本2。
java.lang。NoClassDefFoundError意味着类不能在类路径中找到,根据你的描述,我认为你是通过ant创建一个jar,然后用java -jar执行。你应该检查:
- 在java命令中有一个-cp选项,其中包含所需的jar
- 所需的jar被正确地指向