1

我正在尝试编写一个小程序并将其放入我的网站。我记得很久以前在 1.4 是最新版本时使用 Borland 这样做。它当然使用了小程序标签(我目前正在使用)并且没有问题。但无论如何,我把类文件放在 httpdocs/ 自己的目录下,然后在网页中使用这段代码:

<applet code="wsavatar/WSAvatar" width="425" height="150> Your browser does not support the applet tag. </applet>

当我尝试加载页面时,会发生这种情况:

Java Plug-in 1.6.0_17 Using JRE version 1.6.0_17-b04 Java HotSpot(TM) Client VM

java.lang.ClassFormatError: Incompatible magic value 1008813135 in class file   
  wsavatar/WSAvatar
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(Unknown Source)
  at java.security.SecureClassLoader.defineClass(Unknown Source)
  at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
  at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
  at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)
Exception: java.lang.ClassFormatError: Incompatible magic value 1008813135
in class file wsavatar/WSAvatar

我已经尝试制作一个快速的本地 html 文件来使用相同的小程序代码加载小程序并且它有效。我在网上环顾四周,听说过与此错误有关的各种事情,但我发现似乎没有任何东西可以缓解它。有任何想法吗?

4

2 回答 2

5

幻数是类文件开头的一个四字节值 (0xCAFEBABE),将其标记为类文件而不是任何其他类型的数据。

那么什么类型的文件有幻数 1008813135?在十六进制中,字节 0x3C、0x21、0x44、0x4F。解释为常见拉丁编码中的字符数据是“ <!DO。可能继续为“ <!DOCTYPE”。我们这里有一个 HTML 文件。这可能是一个由损坏的服务器返回的错误页面,仅在 HTTP 响应中带有非错误成功代码。

看看实际提供的是什么。Web 浏览器可能会显示该页面。值得学习使用 telnet(或 nc)并手动输入 HTTP 响应。还有各种用于检查 HTTP 流量的实用程序。

于 2009-12-09T08:19:25.573 回答
3

问题似乎出在您的网站上,而不是您的代码上。谷歌搜索,这个错误似乎是 OpenCMS 等系统最常报告的错误(特别是对于端口 8080 上的 URL)。

所以,我想象正在发生的是浏览器调用加载小程序实际上是失败的,而是返回数据而不是 404/500 错误。Java VM 试图解释返回的错误页面,就好像它是一个类文件一样,并且非常正确地抱怨它毕竟不是一个有效的类文件。(这种情况经常发生在重定向到主页而不是向用户返回实际 HTTP 错误的内容管理系统中。)

要进行测试,请尝试在您的浏览器中手动键入小程序的 URL(不是托管它的页面,小程序本身),然后查看服务器返回的内容。

于 2009-12-09T06:55:29.640 回答