文挡标识: Q168748 [winnt] 标题: 安装 SP3 后 Java 程序造成 IE 3.02 停止响应。 产品: Microsoft Windows NT 版本: 4.00 操作系统: WINDOWS 关键字: kbbug4.00 kbfile kbfix4.00 ------------------------------------------------------------------------- 此文挡适用于: - Microsoft Windows NT Workstation version 4.0 - Microsoft Windows NT Server version 4.0 - Microsoft Internet Explorer version 3.02 ------------------------------------------------------------------------- 现象 ==== 在安装了 Windows NT 4.0 版的 Service Pack 3 后,Internet Explorer 3.02 版在连到含有 Java 程序的 INTERNET 节点时可能会挂起。 此 Java 程序只有在显示属性的调色版被设为 True Color 时才会停止反应。 原因 ==== 在 Windows NT 4.0 版的 Service Pack 3 中,当从一 True Color (32 BPP) 显示器返回一 BI_RGB (未压缩) DIB 时,GetDIBits API 并未设定某些标志位。此 GDI 改变的原因是,在这种情况下并不需要标志位。其副作用是,如果某程序期待 True Color 显示器上的 RGB 掩码时,此改变会影响到此程序。 Internet Explorer 3.02 中的 Java 虚拟机在初始化显示调色板时调用 GetDIBits。此 Java 虚拟机期待一有效的,带符号位的大于0x80h 的 RGB 掩码。如果此掩码小于 0x80h,Java 虚拟机就通过循环移位此掩码使其成倍增加直到它大于 0x80h 为止。因为 Service Pack 3 的 GetDIBits 在 BI_RGB 返回时并不设定其标志位,应用程序可能得到负的 RGB 掩码(如 0xffffffe0h)。 当 Java 虚拟机在检查的 RGB 掩码为负值,它就永远循环,造成Internet Explorer 停止反应。 请注意,Java 虚拟机应该把 RGB 掩码视作无符号整数。在某些情况下,ATI 视频卡返回一有效的 RGB 掩码 0xff000000h,因为 Java 虚拟机不把它视作无符号整数,就引起 Java 虚拟机的死循环。Internet Explorer 4.0 中就会解决针对 ATI 视频卡设为 True Color 时 Java 虚拟机出现的问题。此 Java 代码由 Sun Microsystems, Inc. 授权使用。 解决方法 ======== 要解决此问题,请不要把显示属性的调色版设为 True Color。 Win32k.sys 已被修改,在 True Color 的显示系统中返回有效的 RGB 颜色掩码。 当前状态 ======== Microsoft 已证实这是 Windows NT 4.0 版的问题。修改已完成但未经过完全的回归测试。 请只把此修补程应用到碰到该特定问题的系统中。Microsoft 建议你等到下一版含有此修改的 Service Pack,如果你遇到的该问题非常严重,则另当别论。 欲知详情,请和 Microsoft 技术支持联系。 此修补程序放在以下 Internet 位置: ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/chs/nt40/ hotfixes-postSP3/java-fix 查询关键字: 4.00 ie 3.02 prodnt ============================================================================ MICROSOFT 知识库所提供的信息不带任何种类的质量保证。MICROSOFT 不承诺任何明确的或隐含的质量保证,包括商品买卖及特殊情况适合性的质量保证。不论在任何情况下,即使 MICROSOFT 公司或其代理商已被告知可能的损坏, MICROSOFT 或其代理商对任何直接、间接、偶然性或导致性的商业利润损失,或特殊的损坏都没有任何义务。某些州不允许排除或限制这种导致性或偶然性损坏的义务,在这种情况下前述的限制可能不适用。