JACOB(Java/COM/ActiveX)-如何对事件处理进行故障排除?
我正在尝试使用JACOB与COM对象进行交互 我能够调用对象上的初始化方法(并获取其属性),但没有得到任何事件。下面引用了代码。JACOB(Java/COM/ActiveX)-如何对事件处理进行故障排除?,java,com,activex,jacob,Java,Com,Activex,Jacob,我正在尝试使用JACOB与COM对象进行交互 我能够调用对象上的初始化方法(并获取其属性),但没有得到任何事件。下面引用了代码。 我有一个示例HTML+Javascript页面(在IE中运行),它成功地接收来自同一对象的事件。 我正在考虑以下选项,但如果有任何具体的故障排除想法,我将不胜感激 将我的Java程序发送给开发COM对象的团队,并 他们会在自己这边寻找任何可疑的东西(对象是否有办法知道是否有客户在监听其事件,以及这些事件是否成功交付?) 进入JACOB的本地部分,试着在那一边调试。有
我有一个示例HTML+Javascript页面(在IE中运行),它成功地接收来自同一对象的事件。
我正在考虑以下选项,但如果有任何具体的故障排除想法,我将不胜感激
- 将我的Java程序发送给开发COM对象的团队,并 他们会在自己这边寻找任何可疑的东西(对象是否有办法知道是否有客户在监听其事件,以及这些事件是否成功交付?)
- 进入JACOB的本地部分,试着在那一边调试。有点吓人,因为我的C++生锈了,我从来没有为Windows编程过。
以下是我的具体问题的解决方案: 事实证明,COM对象是作为一个不可见的ActiveX控件编写的,该控件假定它在窗口上下文中运行。这是组件开发团队在我给他们基于JACOB的程序后“发现”的 提供窗口上下文是JACOB似乎没有做的事情
本例中的解决方案是摆脱COM(并使用JNA直接调用本机DLL中的C函数)。解决获取事件故障的简单方法是打开Jacob调试,方法是使用选项运行java
COM.Jacob.debug=true
:
java -Dcom.jacob.debug=true ...
所有接收到的事件都显示在标准错误(或输出)上:
java -Dcom.jacob.debug=true ...
Thread-0: InvocationProxy: trying to invoke Change on Sink@882c01f
Thread-0: InvocationProxy: listener (Sink@882c01f) doesn't implement Change