java.lang.ClassFormatError: Несовместимое магическое значение 218774561

Привет всем, я делаю свой первый апплет для Java сегодня. Я использовал поддомен на сервере, и я не знаю, что делать, потому что я получаю эту действительно странную ошибку.

У меня есть мой кувшин на сервере и все, но каждый раз, когда я пытаюсь загрузить апплет, это происходит.

java.lang.ClassFormatError: Несовместимое магическое значение 218774561 в файле класса Evolution/EvolutionApplet

После исследования выясняется, что несовместимое магическое значение означает, что что-то было повреждено в.jar

Вот веб-сайт http://dementedgames.site88.net/Main.html-файл называется Evolution, если вам нужен HTML-код, который находится на веб-сайте.

Изменить: апплет должен быть запущен из Evolution.EvolutionApplet, а не Evolution.Evolution

3 ответа

Решение

Первоначальная проблема, кажется, исправлена. Я мог бы скачать банку с http://dementedgames.site88.net/Evolution.jar

Обновить

Кажется Evolution.Evolution класс не апплет! Запустите его из командной строки, используя:

java -jar Evolution.jar

Создает рамку (с очень "ретро" видом)! Таким образом, забудьте эту ерунду апплета и запустите фрейм по ссылке, используя Java Web Start.

Старый ответ

OTOH это теперь бросает ClassNotFoundException это (после осмотра банки) заставляет меня думать, что это должно быть:

<html>
<head>
<title>Evolution</title>
</head>
<body bgcolor="#000000" text="#906060">
<center>
<applet code="Evolution.Evolution" archive="Evolution.jar" width="800" height="600">
</applet>
</center>
</body>
</html>

Есть два изменения в code атрибут стоит отметить.

  1. .class расширение было удалено. Незначительное дело, добавление это терпимо, но не правильно.
  2. Applet удалено из имени класса.

Волшебное значение действительного класса Java 0xCAFEBABE, который является шестнадцатеричным значением 3405691582, Это представлено первыми 4 байтами файла. Но вы получаете 218774561 который в свою очередь обозначает символы ASCII CR, LF, < а также ! (CRLF - это новая строка). Чтобы увидеть это сами, запустите этот фрагмент кода:

int magic = 218774561;
ByteBuffer b = ByteBuffer.allocate(4);
b.putInt(magic);
System.out.println(new String(b.array()));

Это в сочетании с апплетом, обслуживаемым веб-сайтом, предполагает, что это начало <!DOCTYPE> что в свою очередь предполагает, что это HTML-документ.

Итак, просьба Evolution.jar по-видимому, фактически вернул HTML-документ. Вы сможете увидеть его самостоятельно, когда измените текущий URI запроса в адресной строке браузера, чтобы он указывал на URL апплета (например, измените /page.html в конце URL к /Evolution.jar). Затем вы увидите, что на самом деле получил браузер, когда пытался загрузить апплет. Возможно, это простой документ об ошибке HTTP 404.

Чтобы это исправить, просто убедитесь, что URL в archive Атрибут правильный. Это относительно текущего URL запроса, как вы видите в адресной строке браузера.

BalusC выше объяснил это очень хорошо. В дополнение к этому вы можете проверить эту ссылку Тема: Несовместимое магическое значение 218774561 ошибка в апплете

Похоже, что кодовая база и / или атрибут кода тэга вашего апплета должны указывать правильно.

Другие вопросы по тегам