我已实施messageAdded
提供的Javamail API
方法,我的程序不会进入该方法。这是我的代码
public void addMessageListenerToFolder(Folder folder, EmailFolderBean<String> item) {
System.out.println("Add message listener point 1");
folder.addMessageCountListener(new MessageCountAdapter() {
public void messageAdded(MessageCountEvent e) {
for (int i = 0; i < e.getMessages().length; i++) {
try {
System.out.println("Add message listener point 2");
Message currentMsg = folder.getMessage(folder.getMessageCount() - i);
item.addEmail(0, currentMsg);
} catch (MessagingException ex) {
Logger.getLogger(FetchFolderService.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
}
我添加了两个System.out
语句,一个在上面代码的第二行,另一个在messageAdded()
方法中,每次调用此方法时都会打印出第一个语句,但我的程序没有输入进入messageAdded()
并且永远不会打印第二个System.out
语句。可能是什么原因。帮我解决这个问题。
编辑1:我的服务始终在运行,每10秒发送一次folder.getMessageCount();
。
编辑2:我正在测试,而不是最终我可以增加时间以下这是我的服务。
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
for (;;) {
try {
Thread.sleep(10000);
if (FetchFolderService.noServiceActive()) {
System.out.println("Checking for Emails!!!!");
for (Folder folder : folderList) {
if (folder.getType() != Folder.HOLDS_FOLDERS && folder.isOpen()) {
folder.getMessageCount();
}
}
}
} catch (InterruptedException | MessagingException e) {
e.printStackTrace();
}
}
}
};
}
这是调试信息。
Deleting: C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\built-jar.properties
Compiling 1 source file to C:\Users\Inzimam\Documents\NetBeansProjects\Mail Client\build\classes
compile-single:
Successful Authentication!
Folder: INBOX
Folder: [Gmail]
subFolder: All Mail
subFolder: Drafts
subFolder: Important
subFolder: Sent Mail
subFolder: Spam
subFolder: Starred
subFolder: Trash
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
Checking for Emails!!!!
debug-single:
BUILD SUCCESSFUL (total time: 1 minute 54 seconds)
答案 0 :(得分:0)
只有在服务器通知客户端(JavaMail)已添加消息时才会调用侦听器,并且只有在向服务器发出命令时才会发出此类通知,例如folder.getMessageCount()。或者,如果您只想等待通知,则可以使用IMAPFolder.idle() method。另请参阅IdleManager class。
答案 1 :(得分:0)
上面的代码中有一个拼写错误(错误)。我使用messageAdded()
但是javamail提供了messagesAdded()
方法。所以使用正确的法术和Override
注释现在一切都很好。