我正在构建一个使用Java自动化界面连接到Enterprise Architect的应用程序。程序退出时,EA进程仍保留在Windows任务管理器中。
应用程序使用windowClosing
挂钩在存储库对象上调用.CloseFile()
,.Exit()
和.destroy()
,但EA进程仍然存在。添加强制垃圾回收的调用似乎没有什么区别。
答案 0 :(得分:3)
加载EA文件可能需要很长时间。在此期间,用户无法做任何事情,只能等待......所以应用程序会显示“请等待”。屏幕。为了防止UI冻结,所有加载都在一个单独的线程(不是SwingWorker)中完成,同时在Glass Pane上播放加载动画。
自动化接口使用COM,当加载程序线程死亡时,它会破坏COM连接。在线程结束之前收集的所有数据都很好,但所有后续访问都失败了(有些神秘)。由于连接被切断,应用程序无法与EA断开连接(因此僵尸)。
我通过在主线程上获得对EA Repository对象的引用(一个非常快速的操作)但仍然延迟加载到工作线程来解决了这个问题。由于主线程在应用程序的整个生命周期中都保持活动状态,因此COM连接保持活动状态,并且界面按原来的预期工作。