/ / ClassFormatException при інтеграції аплета у проект vaadin - java, applet, vaadin

ClassFormatException при інтеграції аплета у проект vaadin - java, applet, vaadin

Ну, я використовую додаток vaadin AppletIintegration Addon, щоб інтегрувати аплет із програмою звукозапису в мій проект vaadin. Ось код:

  AppletIntegration applet = new AppletIntegration() {

private static final long serialVersionUID = 1L;

@Override
public void attach() {
System.out.println("In attach functions");

setAppletArchives(Arrays.asList(new String[] { "SoundRecordingJar.jar" }));
setCodebase(path);
setAppletClass("AudioApplet.class");

setWidth("800px");
setHeight("500px");
}
};
mainWindow.addComponent(applet);

Коли я запускаю його в браузері: Це дає мені таке виняток:

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

Якщо я запускаю той самий аплет з html-файлом, він відмінно працює без винятку. Аплет також підписаний.

Тому, Що означає ця помилка та як її вирішити.

Відповіді:

1 для відповіді № 1

Ваше магічне значення - 1008813135

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

Вихід: <!DO

Файл класу, схоже, пошкоджений. "Магічне значення" - це перші 4 байти у файлі, і вони завжди повинні бути 0xCA 0xFE 0xBA 0xBE. Натомість вони є 0x3C 0x21 0x44 0x4F (1008813135, перетворений у шістнадцятковий). Вони відповідають послідовності ASCII

Спробуйте очистити кеш-пам'ять Java або спробуйте використовувати інший ПК для налагодження.

Можливо, їх безкоштовне обслуговування не дозволяє аплетів.


1 для відповіді № 2

витратив деякий час, намагаючись змусити це працювати без жодної інформаціїпростий аплет для відображення версії Java, яку використовує браузер. Просто базовий сервлет Vaadin з лише екземпляром AppletIntegration на головній сторінці, жодної іншої реальної речі не відбувається.

Спочатку це був клас, в якому не виявлено проблем, а післявиправлення того, що мене залишили з жахливим повідомленням "Несумісне магічне значення 1008813135 у файлі класу ...", яке я просто не міг обійти. Нарешті я зрозумів це і подумав, що розміщу тут, на випадок, якщо хтось прийде дивлячись ...

Отже, ця магія 100881315 насправді є

На сторінці AppletIntegration або навіть тут на форумах незрозуміло, де саме банки слід розміщувати у вашому файлі війни ...

Тепер кожен, хто зробив певне кодування аплетів, знаєщо CODEBASE - це місце, де ви повинні вказати, де знаходяться банки. Але в звичайному сервлеті Vaadin ви також повинні знати про те, яким є шаблон URL-адреси сервлета в блоці web.xml.

Отож, як правило, у вас буде відображення сервлетів, визначене наступним чином у вашому файлі web.xml для сервлету на основі Vaadin:

  <servlet-mapping>
<servlet-name>AppletTest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

Отже, ви в основному перенаправляєте будь-який вхідний запит,тобто "/myclasses.jar", через контролер Vaadin, і Vaadin задихнеться ним і не поверне ваш файл jar. Це була моя перша спроба, яка призвела до помилки 100881315 ...

Я навіть намагався створити папку аплетів і встановити для CODEBASE значення "applets /", але знову та сама помилка, оскільки шаблон URL-адреси направляє запит через контролер Vaadin, який задихається.

Отже, головне - як повернути банку як ресурсчерез контролер Vaadin ... Якщо ви ще не здогадалися, це було зроблено, помістивши вашу банку в папку VAADIN (я натякнув на це, прочитавши тему форуму).

Тож я створив папку VAADIN / аплети, кинув туди свої банки та встановив для CODEBASE значення „VAADIN / applets /” і voila, все працює правильно ...

Будь ласка, Самі, я прошу вас додати цей маленький злиток істини десь на сторінку інтеграції аплетів, принаймні, щоб іншим не довелося витрачати години, відстежуючи це, що я робив ...


0 для відповіді № 3

Насправді ваш магічний код більше схожий на початок файлу HTML. <!DOCTYPE.... Можливо, вам слід перевірити, чи не пішло завантаження (з Firebug, Wireshark чи чимось подібним.) Це може бути повідомлення про помилку 404.