【发布时间】:2011-08-15 07:58:12
【问题描述】:
一位客户注意到我们的一个 java 小程序不再工作了。但是,我们无法判断问题所在。
规格
网络应用程序是tiparlo。它用于记录和组织口语,主要用于学校训练语言和存储以供以后评估。该应用程序包含一个由 JavaScript 管理的 HTML 界面。声音播放和录音是通过内部开发的java applet 完成的。正如您在测试页面上看到的,小程序本身处于工作状态。
然而,在tiparlo 中,小程序(进一步称为录音机)没有预加载的声音文件。由于tiparlo 包含多个声音文件,JavaScript 告诉录音机播放什么文件。例如,如果你想播放 foo.ogg,javascript 会告诉录音机播放 http://url/path/foo.ogg。
这已经工作了几年,但现在已经不行了。
错误跟踪
问题在于它确实在某些条件下工作。例如,它适用于我们的本地开发机器和我们的公共测试环境。它只是不再为我们的客户工作。
工作示例:http://test.s2.olefa.com/cgi-bin/apps/tiparlo?projectid=3&mode=viewer
非工作示例:http://www.ecoles-dudelange.lu/cgi-bin/apps/tiparlo?projectid=1594&mode=viewer
一些有用的事实:
两个示例都在同一台服务器上运行
java 小程序、js 代码、html 解析器和源代码是共享资源。因此,两个示例都运行完全相同的代码
与问题相关的文件有:soundrecorder.js 和 jrecord.jar。
play命令位于 soundrecorder.js:line 112
到目前为止我们所知道的
浏览器对非工作示例的反应不同。 Safari/Mac 一切正常。然而,Safari/Win 在播放时冻结。 Firefox 4 根本不播放任何东西。 Firefox 3.5/Mac 又做对了。然而 Firefox3.5/Win 根本不播放任何东西。 IE9 也有同样的问题。 Chrome 也是如此。 Opera 彻底崩溃,需要重新启动。我们还没有找到适用于非工作示例的 linux 浏览器。澄清一下:工作示例适用于所有平台上的所有浏览器,Safari/Win (meh) 除外。 更新:这取决于 java 版本。使用 java 6.20,所有非工作示例都适用于所有浏览器。使用 java 6.24,只有工作示例有效。
我们尝试为非工作示例 (webX.sX.olefa.com) 使用替代服务器 URL,这与工作示例类似。这次尝试失败了。
我们尝试使用录音机的相对路径(例如 /path/foo.ogg)。
我们尝试将 Java 更新到最新版本。
我们尝试以不同方式访问小程序。
6 个月前我们遇到过类似的问题,这是由 Java 更新引起的。我们在具有较旧 java 版本的 VM 上尝试了不工作的示例。有用。然而,我们怀疑 java 本身并不是罪魁祸首,因为相同的 java-version/browser 在工作示例上工作。
录音机只拒绝播放通过 JS 动态加载的文件。如果它在初始化时加载文件,则没有错误。
小程序本身已加载。您可以通过为其指定宽度/高度来使其可见。怀疑是java/js互通有问题(js在告诉java玩什么但是通信有问题?)。不过我目前还不能确认。
一般来说,我们无法弄清楚为什么在完全相同的条件下运行完全相同的代码可以在一个站点上运行,而在另一个站点上却不行。
解决方案
解决方案是评论的一部分。问题和解决方法可以在here找到。感谢 Ryan 为我们指明了正确的方向。
【问题讨论】:
标签: java javascript applet