我有一个 eclipse 插件,它使用 Jacob 连接到 COM 组件。但在我完全关闭插件后,.exe 文件仍卡在 Windows 进程中。
我使用ComThread.InitMTA(true)
进行初始化,并确保在关闭应用程序之前为我创建的每个COM对象调用SafeRelease()
,并且我调用ComThread.Release()
在最后。
我是否有未完成的事情?
最佳答案
一些进一步的建议:
将对
ComThread.Release()
的调用移至finally
block 中,否则如果抛出异常,线程将保持附加状态。检查是否在每个使用 COM 对象的线程中调用
ComThread.InitMTA
和ComThread.Release
。如果您忘记在工作线程中执行此操作,那么该线程将自动附加并且永远不会分离。避免
InitSTA
并坚持使用InitMTA
。即使只有一个线程使用 COM,我也发现InitSTA
很不稳定。我不知道 JACOB 的内部编码机制是如何工作的,但我最终得到了“幽灵”对象,这些对象看起来有效,但在调用它们的方法时什么也不做。
幸运的是,我从来不需要修改 JACOB 库中的任何代码。
关于java - JACOB 没有正确释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980483/