java - 为什么在与Redemption一起使用时,jacobs“new ActiveXComponent”有时会抛出“无法共同创建对象”?

标签 java outlook-redemption jacob

有时只会发生此错误,因此我的环境基本上应该是正确的:


在32位JRE中运行的Java Applet。当前是1.8_172,但是每个版本的testet都可能发生错误。这包括不同版本的Java 1.6和1.7。
兑换32bit dll已正确注册
使用Outlook 32位(错误发生在不同的Outlook版本和修订版上)
jacob.dll是32位并且在路径中


有问题的代码如下所示:

ActiveXComponent m_oOutlook = ActiveXComponent.connectToActiveInstance( "Outlook.Application" );
Dispatch m_mail = Dispatch.invoke( m_oOutlook.getObject(), "CreateItem", Dispatch.Get, new Object[] { "0" }, new int[0] ).toDispatch();
ActiveXComponent m_safeMailItem = new ActiveXComponent( "Redemption.SafeMailItem" ); // <-- exception happens here


在大多数情况下,使用此代码的应用程序根本不会通过此程序发送电子邮件。但这有时会引发以下异常:

com.jacob.com.ComFailException: Can't co-create object
    at com.jacob.com.Dispatch.createInstanceNative(Native Method)
    at com.jacob.com.Dispatch.<init>(Dispatch.java:99)
    at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java:58)


在同一会话中成功发送了几封电子邮件后,可能会发生这种情况。

因为这个问题根本无法重现,所以我没有主意。它有时会发生。

我们当前的解决方法:重新启动我们的应用程序,如果这也不能帮助重新启动Outlook。



在德米特里·斯特雷布连科的回答后由我编辑:

我可以访问和更改的Java代码作为Java Bean加载到主应用程序(封闭源“ Oracle Forms” Java Applet)中。

我进行了一些测试,并且Bean的静态成员似乎在已加载的Applet的整个生命周期中都可以生存(当然是在首次实例化Bean之后)。

现在,我在Bean的构造函数中创建一个类型为“ Redemption.RDOSession”的ActiveXComponent的实例,并将其保存在静态成员变量中(如果尚未设置)。

    public OutlookBean()
    {
        if( m_RDOSession == null )
        {
            m_RDOSession = new ActiveXComponent( "Redemption.RDOSession" );

            System.out.println( "RDOSession created" );
        }
    };

    private static ActiveXComponent m_RDOSession = null;


这样够了吗?对象的存在是否足够,还是我需要在该对象上调用任何成员函数?您在http://www.dimastr.com/redemption/faq.htm#Threads处的FAQ看起来就像创建对象就足够了:


每个可创建的赎回对象(例如RDOSession)在创建时都会通过调用MAPIInitialize来初始化MAPI。


在我的计算机上,它可以正常运行,没有任何负面影响,但是由于我无法重现该错误,因此无法检查是否可以解决此问题。

让我的用户测试它是一项艰巨的任务,我希望至少有一半的信心可以对他们有所帮助,并且不会带来任何新问题。 🙄

提前谢谢了。

最佳答案

如果您多次创建和销毁可创建的Redemption对象,则实际上是在循环MAPI系统,但事实并非如此。

经验法则是创建一个全局赎回(您无需对其进行任何操作,只需使其保持活动状态即可)-这样,MAPI系统将被加载并保持加载状态。

http://www.dimastr.com/redemption/faq.htm#Threads

关于java - 为什么在与Redemption一起使用时,jacobs“new ActiveXComponent”有时会抛出“无法共同创建对象”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001859/

相关文章:

java - 无法让 Spring 注入(inject)我的依赖项

mapi - 我可以在服务器上没有安装 Outlook 的情况下使用 Redemption 查看另一个帐户的电子邮件吗?

Java、Jacob 和 Microsoft Word : how to properly handle events?

java - JSoup "wrap"每次都没有按预期工作

java - 在一行中提示多个输入

java - 将控制台输出到文本文件中? - java

c# - Outlook Redemption 版本

c# - 使用 GetRDOObjectFromOutlookObject 时,兑换邮件对象未正确链接到原始邮件项目

java - JACOB 库在多线程中使用时失败

java - 等待邮件未通过 jacob 发送/关闭