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
атрибут стоит отметить.
.class
расширение было удалено. Незначительное дело, добавление это терпимо, но не правильно.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 ошибка в апплете
Похоже, что кодовая база и / или атрибут кода тэга вашего апплета должны указывать правильно.