【问题标题】:How to debug/log/trace an applet loading problem?如何调试/记录/跟踪小程序加载问题?
【发布时间】:2010-11-13 11:27:06
【问题描述】:

最近,我们的两个客户报告了我们的小程序存在问题。查看 java 插件控制台,它充满了 ClassNotFoundException,所以我们的代码都没有被执行。

我已经能够使用磁盘上可用空间为 0 的虚拟 pc 映像来重现堆栈跟踪,但是当我恢复一些磁盘空间时问题就消失了,并且用户告诉我他们的磁盘未满;他们能够创建新文件。

我们的小程序需要 java 6,并且 jre 的更新 1、10 和 14 出现了问题。我们也试过不同的浏览器(IE和火狐),清除浏览器和java缓存,...

如何调试或跟踪 jvm 加载我们的小程序的操作?

我想问题出在 Windows 上的一些安全指令上,所以我使用 Sysinternal 的进程监视器来记录活动,但我真的不知道在哪里查看。

【问题讨论】:

    标签: java debugging logging applet trace


    【解决方案1】:

    我们的一位客户遇到了类似的问题。我们发现这是一些与客户端代理配置相关的 Java 版本中的一个奇怪错误。详情请看这篇文章

    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6723715

    此外,由于不同的原因,我们的小程序在新版本上失败了。

    现在,在类似的情况下,我要求他们检查 javatester.org,以便我可以查看小程序(通常)是否可以在他们的浏览器中加载。如果该页面加载正常,则说明我们的小程序(或页面)有问题。否则这是他们的配置问题。无论如何我都会帮助他们,但调试起来更容易。

    【讨论】:

      【解决方案2】:

      不久前有类似的问题。在我们的例子中,问题似乎是小程序标签是如何在网页上设置的。如果它的顺序错误或包含codebase 属性,则会失败并显示 6u10+。这对我们有用:

      <applet name="DMGANTT" archive="DMGantt.zip" code="dm.applet.DMGanttApplet" 
       width='100%' height='100%' mayscript="mayscript">
      

      【讨论】:

      • 我正在使用 deployJava.js 脚本编写小程序标签,我们没有添加 codebase 属性。属性如何排列错误?你有没有因为破旧的订单而失败的例子?
      • 是的,如果我更改代码和存档的顺序,6u10 会以某种方式在服务器上搜索 DMGanttApplet,而不是在提供的存档中。缺少哪些类 - 您的错误的堆栈跟踪是什么?
      • 我已经用属性顺序尝试了你的建议,但问题仍然存在。在堆栈跟踪中找不到的类是在 code 属性中指定的类,因此不会执行任何操作。我可以在服务器日志中看到请求了带有类的 jar。实际上,请求 jar 的次数与页面中的小程序一样多,但是当从可以工作的 PC 上查看页面时,它只请求一次。
      • @kd304:出于好奇,您是否使用或尝试了 codebase_lookup 参数? java.sun.com/javase/6/docs/technotes/guides/plugin/… 我们所有的小程序都在这个参数设置为 true 的情况下运行,所以如果插件找不到类或资源,它不会向服务器请求它。
      • 不,因为属性重新排序和代码库参数删除足以让事情重新开始。
      【解决方案3】:

      我一直在查看来自 JDK 的插件源,我发现在设置环境变量 JPI_PLUGIN2_DEBUG 的日志中还有其他可用的调试信息。 不幸的是,我仍然只看到ClassNotFound 异常。

      我发现了一段可以吞下所有异常的插件代码,所以也许我的用户问题就在那里......

      【讨论】:

        【解决方案4】:

        Java 缓存很可能是混乱的。在控制面板中打开 Java 并清除所有临时文件,看看它是否消失。

        可以启用登录 Java 控制台以加载小程序,这很有帮助(即使插件非常神秘)。见http://java.sun.com/javase/6/docs/technotes/guides/deployment/deployment-guide/tracing_logging.html

        【讨论】:

        • 谢谢!我忘记在我的磁盘完整测试环境中启用跟踪。现在我已经尝试过了,但它只显示“java.io.IOException:写入错误”。没有关于尝试写入的路径或错误原因的详细信息,因此我认为如果我们在客户端 PC 上启用跟踪,它不会提供足够的信息。这是我们可以从 JVM 获得的最大跟踪吗?
        • 清理 Java 缓存对您的用户有帮助吗?
        • 没有。我们已经尝试从 java 控制面板清理 java 缓存并从 temp 目录中删除所有 jar_cache*.tmp 文件。我想这是一些 windows 或网络安全指令,但我不知道从哪里继续,所以我试图获取正在发生的事情的详细日志。
        • 如果您正在处理签名的 jar 文件(以摆脱沙箱),则证书链可能会被破坏。我最近查看了 JNLP 启动器代码,您可以在 Java 控制台上获得的所有内容都必须在启动器中显式编码。我不熟悉新的浏览器插件。我建议获取您正在使用的插件的源代码,并准确了解您看到的日志输出的含义。注意:OpenJDK 不会这样做,因为这些组件不在 GPL 之下。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 2017-05-26
        • 2018-05-12
        • 2015-07-30
        • 1970-01-01
        • 2012-09-21
        相关资源
        最近更新 更多