我有一个applet打包了第三部分dll(来自JTwain)。我的applet扫描TWAIN兼容默认打印机中的文档。小程序卡纸失败,无法恢复。用户导航离开页面并且销毁小程序。返回页面时,它再次失败。关闭浏览器(在PC上杀死java.exe进程),然后返回到页面清除问题,一切正常。
我想重新启动所有内容,而无需用户关闭浏览器。我已经将GUID查询字符串添加到从中加载applet资源的URL中 - 所以我知道没有任何内容被缓存。我已经检查了Windows任务管理器,并且没有由dll创建的进程,这一切都发生在主java.exe进程中。我尝试在一个线程中包装扫描进程,所以我可以在stop或destroy方法中中断它(以防applet线程在applet被销毁时没有停止),但是没有用。
任何建议都将不胜感激。理想情况下,我想在applet卸载时重启java(但我怀疑这是可能的)。
更新
我花了几天时间试图找出导致applet失败的原因。我还是不知道:(
当发生卡纸时(不是我的代码),会产生一些弹出窗口。第一个警告用户卡纸,可以通过单击确定按钮关闭。第二个说“从设备读取”并挂起。它不能靠近红色,关闭窗口,顶角的图标 - 我从任务管理器中杀死它并且窗口要求发送关于“无响应程序”的报告。我假设这些弹出窗口是由dll生成的。并且假设第二个挂起,我的假设是由dll启动的线程已挂起,同时保留对TWAIN应用程序的某个组件的锁定。我得到了
com.asprise.util.jtwain.JTwainException: Failed to open the specified data source:
Source: TW-Brother MFC-9970CDW LAN Thrown
..当我尝试访问扫描仪时。
我对如何获取更多信息感到有点失落。我正在Windows虚拟PC上测试我的applet(以便使用ie7),并且在这种环境中没有用于步骤调试的方法。 (而且它正在崩溃第三方代码,无论如何我都没有来源)
答案 0 :(得分:1)
我在这里只看到两个实用选项:
BasicService.showDocument(URLof.jnlp)
,如果它可以检测到DLL的问题并且本身不会被冻结。当然,您还应该向.Asprise(?)开发人员报告错误。 最佳解决方案是将问题固定在其源头。我们在这里做的任何事情都是'解决方法'。