Вставить Java-апплет через URL-данные
Я пытаюсь изучить возможности данных URL для встраивания в апплет Java Java.
Документация для HTML-тегов для создания Java-апплета 1 не исключает этот параметр, но я, похоже, не могу этого сделать.
У меня есть разные варианты значений тегов HTML, использующих (объект и апплет), и то, что, по моему мнению, приблизилось к моей цели, было следующим:
<object type="application/x-java-applet" width="100" height="100">
<param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/>
<param name="code" value="test.class"/>
<h1>not working</h1>
</object>
Это изменение приводит к исключению IlegalArgumentException с текстом "name". Я проверяю это нажатие на значок ошибки в браузере. На консоли java полная трассировка стека:
java.net.MalformedURLException: unknown protocol: data
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.setupProgress(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Кто-нибудь имеет представление о том, как это сделать или если это невозможно?
PS: Вот пример того, как встраивать JNLP в HTML через Oracle здесь
Ответы
Ответ 1
спецификация HTML4 для элемента OBJECT позволяет встраивать встроенные данные через URL DATA и создание экземпляра Applet из Oracle также позволяет это. Проведенные тесты показывают плагин Java-браузера (от Oracle), а доступный исходный код из Java SE 6 показывает, что реализация не поддерживает он.
В этом случае, кажется, не имеет значения, поддерживает ли браузер его, потому что ссылка на ресурсы для ссылки ресурсов в элементе HTML/объекте Object/Applet выполняется с помощью плагина браузера.
Альтернативой будет использование десериализации апплета, сериализовано через URL DATA, с использованием атрибута OBJECT элемента Идентификатор ошибки: 4756961.
Результаты моих тестов с JRE7 на 64-битной машине Windows следующие:
- Передача JAR через атрибут URL DATA to ARCHIVE приводит к исключению IllegalArgumentException в Applet2Manager.loadJarFiles();
- Передача класса через атрибут URL DATA to CODE приводит к исключению ClassNotFoundException в Applet2ClassLoader.findClass();
- Передача сериализованного апплета через атрибут URL DATA в OBJECT приводит к исключению FileNotFoundException в Plugin2ClassLoader.getResourceAsResource().
Ответ 2
Даже если это допустимо с помощью стандартов HTML, JRE обычно не понимают кодированные данные base64.