java - 从小程序重新启动 java.exe

标签 java dll applet jvm twain

我有一个小程序,其中包含第三方 dll(来自 JTwain)。我的小程序从 TWAIN 兼容的默认打印机扫描文档。小程序因卡纸而失败并且无法恢复。用户离开页面并且小程序被销毁。当返回页面时,它再次失败。关闭浏览器(这会杀死电脑上的 java.exe 进程),然后返回页面即可清除问题,一切正常。

我想重新启动一切,而不需要用户关闭浏览器。我已将 GUID 查询字符串添加到从中加载小程序资源的 URL,因此我知道没有缓存任何内容。我检查了 Windows 任务管理器,发现 dll 没有创建任何进程,这一切都发生在主 java.exe 进程中。我尝试将扫描过程包装在一个线程中,以便我可以在 stop 或 destroy 方法中中断它(以防小程序线程在小程序被销毁时没有停止),但这不起作用。

任何建议将不胜感激。理想情况下,我希望在小程序卸载时以某种方式重新启动 java(但我怀疑这是可能的)。

更新

我花了几天时间试图找出导致小程序失败的原因。我还是不知道:(

当发生卡纸时(不是我的代码),会产生几个弹出窗口。第一个警告用户卡纸,并且可以通过单击“确定”按钮关闭。第二个说“从设备读取”并挂起。它无法通过顶部角落的红色关闭窗口图标关闭 - 我从任务管理器中杀死它,并且 Windows 要求发送有关“无响应程序”的报告。我假设这些弹出窗口是由 dll 生成的。鉴于第二个挂起,我的假设是由 dll 启动的线程已挂起,同时保留了 TWAIN 应用程序某些组件的锁定。我明白了

com.asprise.util.jtwain.JTwainException: Failed to open the specified data source:
    Source: TW-Brother MFC-9970CDW LAN Thrown

..当我尝试访问扫描仪时。

我不知道如何才能获得更多信息。我正在Windows虚拟PC上测试我的小程序(以便使用ie7),并且没有在此环境中进行单步调试的方法。 (而且它在第三方代码上崩溃,无论如何我都没有来源)

最佳答案

我在这里只看到两个实用的选择:

  1. 使用可以毫无问题地处理卡纸的 API。当然,这说起来容易(获得强大的 API),但很难找到。
  2. 启动应用程序。自由 float 使用 Java Web Start 。如果它卡住了,用户可以终止它并单击新 JVM 中另一个实例的链接。或者,如果小程序可以检测到 DLL 的问题并且本身没有被卡住,那么它也可能会调用 BasicService.showDocument(URLof.jnlp)

当然,您还应该向..Asprise(?) 开发人员报告该错误。 最佳解决方案是从源头上解决问题。我们在这里所做的任何事情都是一种“解决方法”。

关于java - 从小程序重新启动 java.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12316271/

相关文章:

java - 对于移动平台浏览器来说,Java Applet 的替代品有哪些?混淆的 Javascript 安全吗?

java - iText - 如何将条形码添加到文档(com.itextpdf.text.Document)?

java - 在 Tomcat 服务器中使用自签名证书的可信 SSL,无需在浏览器中导入证书

java - 模拟嵌套调用时出错

android - Android 中是否有 DLL 或类似 DLL 的概念?

c++ - 如何找到使用 C++ 在注册表中注册的 DLL 的绝对路径?

c# - 引用同一程序集的不同版本

不再接受 UIWebView。相反,使用 WKWebView

java - 将 P12 转换为 JKS 证书 Adode AIR 到原生 Android 问题

java - 如何确定 Applet 是否已签名并显示证书的提供者,例如Digicert 和证书的到期日期