通过 URL 数据嵌入 Java 小程序
Posted
技术标签:
【中文标题】通过 URL 数据嵌入 Java 小程序【英文标题】:Embed Java applet through URL data 【发布时间】:2012-09-09 14:49:57 【问题描述】:我正在尝试探索嵌入 html Java 小程序的 URL 数据功能。
文档,用于实例化 java 小程序 1 的 HTML 标记,不排除此选项,但我似乎无法做到这一点。
我使用(对象和小程序)有不同的 HTML 标记值变体,我认为接近我的目标的是:
<object type="application/x-java-applet" >
<param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/>
<param name="code" value="test.class"/>
<h1>not working</h1>
</object>
此变体导致带有文本“名称”的 IlegalArgumentException。我点击浏览器上的错误图标来检查这个。在 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:Oracle here有一个如何在 HTML 中嵌入 JNLP 的示例
【问题讨论】:
不得不承认前几天我没有仔细阅读这篇文章,错过了最后一个链接。有趣的是,JNLP 可以使用 base 64 编码.. 如果将data:application/java-archive
与data:application/x-java-archive
交换会发生什么?
同样的例外。插件处理程序似乎无法识别 DATA URL,如果能看到插件的源代码就好了 :) 完整的例外:pastebin.com/ddsDSTQg
您可以将堆栈跟踪编辑到问题中吗?还要使用代码格式。顺便说一句 - 我试图在这里设置一个本地测试,结果是this question。大闹天宫! ;)
好吧,您现在已经了解到“不排除”并不意味着“包含”:P
【参考方案1】:
OBJECT 元素的HTML4 specification 允许通过URL DATA 嵌入内联数据,Oracle 的Applet 实例化documentation 也允许这样做。执行的测试显示 Java 浏览器插件(来自 Oracle),以及来自 Java SE 6 的可用源代码,表明实现不支持它。
在这种情况下,浏览器是否支持似乎并不重要,因为 Object/Applet HTML 元素中资源引用的资源处理由浏览器插件执行。
另一种方法是使用小程序反序列化,通过 URL DATA 序列化,使用 APPLET element 的 OBJECT 属性。正如 HTML4 规范中提到的,没有对 APPLET 和 OBJECT 属性的积极支持,而且 JRE 似乎也不支持从 URL DATA 反序列化对象。
简而言之,JRE 不支持 CODE、OBJECT 和 ARCHIVE HTML 属性中的 base64 反序列化。
还有一个关于 JRE1.4.1 中的 URL DATA 支持的 BUG 未实现 Bug ID: 4756961。
我在 64 位 Windows 机器上使用 JRE7 的测试结果如下:
通过 URL DATA 将 JAR 传递给 ARCHIVE 属性会导致 Applet2Manager.loadJarFiles() 中出现 IllegalArgumentException; 通过 URL DATA 将类传递给 CODE 属性会导致 Applet2ClassLoader.findClass() 中出现 ClassNotFoundException; 通过 URL DATA 将序列化小程序传递给 OBJECT 属性会导致 Plugin2ClassLoader.getResourceAsResource() 中出现 FileNotFoundException。【讨论】:
优秀的答案,通过有用的链接进行了深入研究。希望我能多次投票。【参考方案2】:即使 HTML 标准允许,JRE 通常也不理解 base64 编码数据。
【讨论】:
以上是关于通过 URL 数据嵌入 Java 小程序的主要内容,如果未能解决你的问题,请参考以下文章
我想把我的java小程序中嵌入一个背景音乐,写出添加背景音乐代码。
嵌入式 Java Web 小程序的 Microsoft 版本是啥?