我有一个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进程内存)都无法控制地增长。

07-24 09:45