java - JACOB 没有正确释放对象

标签 java com jacob

我有一个 eclipse 插件,它使用 Jacob 连接到 COM 组件。但在我完全关闭插件后,.exe 文件仍卡在 Windows 进程中。

我使用ComThread.InitMTA(true)进行初始化,并确保在关闭应用程序之前为我创建的每个COM对象调用SafeRelease(),并且我调用ComThread.Release() 在最后。

我是否有未完成的事情?

最佳答案

一些进一步的建议:

  1. 将对 ComThread.Release() 的调用移至 finally block 中,否则如果抛出异常,线程将保持附加状态。

  2. 检查是否在每个使用 COM 对象的线程中调用 ComThread.InitMTAComThread.Release。如果您忘记在工作线程中执行此操作,那么该线程将自动附加并且永远不会分离。

  3. 避免 InitSTA 并坚持使用 InitMTA。即使只有一个线程使用 COM,我也发现 InitSTA 很不稳定。我不知道 JACOB 的内部编码机制是如何工作的,但我最终得到了“幽灵”对象,这些对象看起来有效,但在调用它们的方法时什么也不做。

幸运的是,我从来不需要修改 JACOB 库中的任何代码。

关于java - JACOB 没有正确释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980483/

相关文章:

java - 类设计查询

c# - 我怎么知道 `ThisWorkbook` 是 `Workbook` ?

java - 使用 Jacob 1.18 从 Java 调用宏

java - 在 Lucene 文档中添加字段

java - Hudson 不使用 Maven 生成的类路径?

c# - COM、STA 和多线程

c++ - 如何扩展 CAxHostWindow?

maven - 在 Jenkins 插件中使用外部 dll 库

java - 如何解决 Apache Tomcat 中的 "no jacob-1.xx-x86"Unsatisfiable Link Error?

Java观察者模式问题?