对于我当前的 java 练习,我必须从 2 个不同的 gmail 帐户获取邮件。我通过创建我的 gmail 类的新实例来做到这一点。gmail 类扩展了线程,其中有一个同步的方法 readMail() 获取邮件并打印它。此 readMail 方法由 run 方法在 while(true) 循环中调用,然后休眠 30 秒,其想法是每 30 秒获取一次邮件。但是,同步方法似乎不起作用。线程相互中断,并且在另一个线程中断并开始打印之前,该方法不会打印消息的所有项。
任何建议将不胜感激。
请参阅下面给我带来麻烦的方法:
public synchronized void readMail() throws MessagingException, IOException {
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
messages = inbox.getMessages();
// System.out.println("No of Messages : " + inbox.getMessageCount());
// System.out.println("No of Unread Messages : "
// + inbox.getUnreadMessageCount());
for (int i = 0; i < inbox.getUnreadMessageCount(); i++) {
System.out
.println("*****************************************************************************");
System.out.println("NEW MESSAGE " + (i + 1) + ":");
msg = messages[i];
// System.out.println(msg.getMessageNumber());
// Object String;
// System.out.println(folder.getUID(msg)
String subject = msg.getSubject();
System.out.println("Subject: " + subject);
System.out.println("From: " + msg.getFrom()[0]);
System.out.println("To: " + msg.getAllRecipients()[0]);
System.out.println("Date: " + msg.getReceivedDate());
System.out.println("Size: " + msg.getSize());
// System.out.println(msg.getFlags());
// System.out.println("Body: \n"+ msg.getContent());
// System.out.println(msg.getContentType());
}
}
然后运行方法:
public void run() {
while (true) {
try {
readMail();
} catch (MessagingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}