在将一个桌面程序以Applet形式发布时,往往因为资源文件的路径问题需要获取codeBase,然后从服务器端获取资源,在IE浏览器中,默认就可以通过以下语句获取到codeBase
Map<String, String> named = parameters.getNamed(); this.codebase = named.get("codeBase");
然而Firefox却不支持,没有办法在默认情况下获取到codeBase,所以就考虑通过传递参数codeBase进入Applet。
通过JNLP将参数codeBase传入到Applet,IE中传入的参数会覆盖默认的codeBase的内容。此时上面的Java代码在IE和Firefox中就都可以获取codeBase了。
<?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="Daks140UIDesign.jnlp"> <information> <title>Daks140UIDesign</title> <vendor>Alan</vendor> <description>Daks140UIDesign</description> <offline-allowed/> </information> <resources> <jfx:javafx-runtime version="2.2+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/> </resources> <resources> <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="Daks140UIDesign.jar" size="55632" download="eager" /> </resources> <security> <all-permissions/> </security> <applet-desc width="800" height="600" main-class="com.javafx.main.NoJavaFXFallback" name="Daks140UIDesign" > <param name="requiredFXVersion" value="2.2+"/> </applet-desc> <jfx:javafx-desc width="800" height="600" main-class="daks140uidesign.Daks140UIDesign" name="Daks140UIDesign" > <fx:param name="codeBase" value="http://localhost:8080/Daks140UIDesignSA/"/> </jfx:javafx-desc> <update check="always"/> </jnlp>
对于JNLP,这里需要注意,如果在applet-desc中加入param是不起作用的,需要在jfx:javafx-desc里面添加fx:parm
<html> <head> <SCRIPT src="./web-files/dtjava.js"></SCRIPT> <script> function javafxEmbed() { dtjava.embed( { url: 'Daks140UIDesign.jnlp', placeholder: 'javafx-app-placeholder', width: '100%', height: '100%' }, { javafx: '2.2+' }, {} ); } <!-- Embed FX application into web page once page is loaded --> dtjava.addOnloadCallback(javafxEmbed); </script> </head> <body> <div id='javafx-app-placeholder'></div> </body> </html>
对于HTML,需要特别注意一点,通过Netbeans的JavaFX2工程产生的HTML中有一个jnlp_content属性,这个属性一定要删除,否则在JNLP文件中的任何修改都不会起作用
http://stackoverflow.com/questions/15704637/passing-parameters-from-jnlp-to-javafx2