【问题标题】:try of my code works when the method is run on its own, but when I call the method when testing my program... catch errors appears当该方法自行运行时,我的代码尝试有效,但是当我在测试程序时调用该方法时...出现捕获错误
【发布时间】:2017-07-28 18:39:54
【问题描述】:
public static void sendMail(){

      Properties prop = new Properties(); 
      prop.put("mail.smtp.ssl.trust", "smtp.gmail.com");
      prop.put("mail.smtp.auth", true);
      prop.put("mail.smtp.starttles.enable", true);
      prop.put("mail.smtp.host", "smtp.gmail.com");
      prop.put("mail.smtp.port", "587"); 
      prop.put("mail.smtp.starttls.enable", "true");

       Session session = Session.getInstance(prop, new javax.mail.Authenticator()
      { 
       protected javax.mail.PasswordAuthentication getPasswordAuthentication()
       {
           return new javax.mail.PasswordAuthentication("testerkenan@gmail.com", "tester1234"); 
       }

     });

       Calendar cal = Calendar.getInstance();
       cal.add(Calendar.DATE, 1);
       SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
       System.out.println(cal.getTime());
       String formatted = format1.format(cal.getTime());
       ArrayList<Patient> list = new ArrayList<>();
        try {
           list = Arraycreate.Arraypatients();
           System.out.println(list.get(0).getName());
           System.out.println("list instiated");
           for(int j = 0; j < 4; j++){
               System.out.println("for loop works");
               if (list.get(j).getNext().getDay() == cal.getTime().getDay() && list.get(j).getNext().getMonth() == cal.getTime().getMonth()&& list.get(j).getNext().getYear() == cal.getTime().getYear()){
          System.out.println("if function works");
          /*
           try   {
           Message message = new MimeMessage(session);  
           message.setFrom(new InternetAddress("testerkenan@gmail.com"));
           message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("testerkenan@gmail.com"));
           message.setSubject("Follow up alert");

           MimeBodyPart messageBodyPart = new MimeBodyPart();
           messageBodyPart.setText("Good Morning Doctor, you have a follow up today with " + list.get(j).getName()); // enter message
           Multipart multipart = new MimeMultipart();  
           multipart.addBodyPart(messageBodyPart); 
           Transport.send(message);


           JOptionPane.showMessageDialog(null, "Message Sent!");

           } catch(Exception e) {

           JOptionPane.showMessageDialog(null, "Something Wrong With Email!");

            }*/
        }
        }
       }catch (Exception e){
           System.out.println(e);

我想在我的程序中发送一封电子邮件,所以我创建了这个方法。我使用了 System.out.println() 并注释掉了发送电子邮件部分以检查每个部分是否正在运行并且它们正在运行。但是,在应用发送电子邮件代码时。我得到了 catch 错误 e 和这个输出:

2017 年 3 月 9 日星期四 13:07:17 GST

java.util.NoSuchElementException: No line found

现在我已经在这个邮件方法中使用了 Arraylist,当我使用另一种方法时,我收到了 catch 错误。在我尝试从返回排序后的数组列表的 Arraycreate.Arraypatients() 方法中调用列表之前,之前的方法运行良好。

【问题讨论】:

  • 能不能显示异常
  • Arraycreate.Arraypatients() 返回一个少于 4 个元素的列表。
  • 欢迎来到 SO。发布错误消息时,发布完整的堆栈跟踪,并标记堆栈跟踪发生错误的行。
  • 顺便说一下,Java 中常见的命名约定是 getter(Arraypatients() 显然是)应该命名为“getPropertyname” - 所以在你的例子中是“getArraypatients()”。
  • Arraycreate.Arraypatients() 不会返回少于 4 个元素的列表,我在其他类中使用了相同的列表,并通过打印对其进行了测试。

标签: java arraylist try-catch jakarta-mail bluej


【解决方案1】:

我认为由于您对 ArrayList 的实例化而引发了错误,并且由于您没有显示您的 ArrayPatients 函数,我无法确定,但我认为您应该更改:

ArrayList<Patient> list = new ArrayList<>();

ArrayList<Patient> list = null;

【讨论】:

  • 虽然您的建议没问题,但我认为这与异常无关。他应该将他的 for 循环更改为 for int j = 0; j &lt; list.size(); j++)
  • 我的 for 循环可能有什么问题?
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 2019-01-26
  • 2021-12-24
  • 2012-05-26
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多