为什么我没有通过Com4J接收COM事件?

我正在使用Com4J与Microsoft Outlook进行交互。我根据Com4J教程生成了Java类型定义。以下是一些等待用户关闭电子邮件的代码示例。
// Registers my event handler
mailItem.advise(
        ItemEvents.class,
        new ItemEvents() {
            @Override
            public void close(Holder<Boolean> cancel) {
                // TODO Auto-generated method stub
                super.close(cancel);
                System.out.println("Closed");
            }
        }
    );

// Displays the email to the user
mailItem.display();
此代码成功向用户显示电子邮件。不幸的是,当用户关闭窗口时,我的程序永远不会打印
"Closed"
。     
已邀请:
当Com4J生成一个事件类(在我的场景中为
ItemEvents
)时,所有生成的方法的默认行为是抛出
UnsupportedOperationException
(有关详细信息,请参阅
com4j.tlbimp.EventInterfaceGenerator
类)。 例如,这是我的匿名类重写的
ItemEvents
类的
close
方法:
@DISPID(61444)
public void close(Holder<Boolean> cancel) {
    throw new UnsupportedOperationException();
}
因此,当我的匿名类调用
super.close(cancel);
时,父类会抛出一个
UnsupportedOperationException
,阻止执行到达我的
System.out.println("Closed");
语句。因此,我的匿名类应该看起来像这样:
mailItem.advise(
        ItemEvents.class,
        new ItemEvents() {
            @Override
            public void close(Holder<Boolean> cancel) {
                System.out.println("Closed");
            }
        }
    );
让我感到惊讶的是,Com4J似乎完全忽略了从事件处理程序中抛出的ѭ3,让我没有指出实际发生了什么。我写了这段代码来演示:
mailItem.advise(
        ItemEvents.class,
        new ItemEvents() {
            @Override
            public void close(Holder<Boolean> cancel) {
                System.out.println("Getting ready to throw the exception...");
                throw new RuntimeException("ERROR! ERROR!");
            }
        }
    );
该程序发出此输出: 准备抛出异常...... 但是,没有迹象表明
RuntimeException
曾被抛出。     

要回复问题请先登录注册