我有一个eclipse插件,它使用Jacob连接到COM组件。但是,在我完全关闭插件后,.exe文件仍然挂在Windows进程中。
我使用ComThread.InitMTA(true)
进行初始化,并确保在关闭应用程序之前为我创建的每个COM对象调用SafeRelease()
,并在最后调用ComThread.Release()
。
我是否遗漏了什么?
最佳答案
TD2JIRA转换器也有同样的问题。最终不得不修补Jacob文件之一才能释放对象。之后,一切顺利。
我的客户端logout()方法中的代码现在如下所示:
try {
Class rot = ROT.class;
Method clear = rot.getDeclaredMethod("clearObjects", new Class[]{});
clear.setAccessible(true);
clear.invoke(null, new Object[]{});
} catch( Exception ex ) {
ex.printStackTrace();
}
最初无法访问ROT类,AFAIR。
更新资料
在Jacob中释放资源的正确方法是调用
ComThread.InitSTA(); // or ComThread.InitMTA()
...
ComThread.Release();
不好的是,有时它没有帮助。尽管Jacob调用了本机方法release(),但是内存(甚至不是Java内存,而是JVM进程内存)都无法控制地增长。