我已经多年没有使用Java了(这是我的借口)。
我正在尝试启动Java Swing UI作为Applet(以前通过Web Start完成)。
我已经修改了jnlp文件,以反映我知道applet所必需的更改(例如使用applet-desc而不是application-desc)。
在jnlp文件中的<resources>
标签中,我们像这样设置系统属性:
<property name="java.security.auth.login.config" value="$$context/app/auth.conf"/>
在主类的init方法中,我们尝试读取这些系统属性中的一些,并且总是得到"null"作为值。
有没有人知道为什么系统属性不"粘"?
可能相关的奇怪:我有Java设置为打开控制台时运行的东西。当我用这个小程序加载页面时,控制台窗口打开两次,两个窗口都显示加载jnlp的详细信息,但只有一个窗口继续加载完整的应用程序。
下面是jnlp文件:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" >
<information>
<title>app</title>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" java-vm-args="-Xms128m -Xmx1024m -Xss1m"/>
<property name="java.naming.factory.initial" value="org.jboss.naming.HttpNamingContextFactory"/>
<property name="java.naming.factory.url.pkgs" value="org.jboss.naming:org.jnp.interfaces"/>
<property name="java.naming.provider.url" value="$$context/invoker/JNDIFactory"/>
<property name="java.security.policy" value="$$context/app/server.policy"/>
<property name="java.security.auth.login.config" value="$$context/app/auth.conf"/>
<property name="login.context" value="client-login"/>
<property name="jndi.port" value="1099"/>
<property name="service.impl" value="Remote"/>
<property name="polling" value="true"/>
<jar href="cglib-2.1.3.jar"/>
<jar href="com.jdas.apps.binmgmt.gui.jar" main="true"/>
<jar href="commons-beanutils.jar"/>
<jar href="commons-collections-2.1.1.jar"/>
<jar href="commons-javaflow.jar"/>
<jar href="commons-lang.jar"/>
<jar href="commons-logging.jar"/>
<jar href="ecs-1.4.1.jar"/>
<jar href="hibernate3.jar"/>
<jar href="itext-1.01.jar"/>
<jar href="jade-5.2.3_AGRIS_PATCH.jar"/>
<jar href="jbossall-client.jar"/>
<jar href="jboss-j2ee.jar"/>
<jar href="jcalendar-1.1.4-agris.jar"/>
<jar href="jhall-3.1.3.jar"/>
<jar href="looks-all-1.1.jar"/>
<jar href="odmg-3.0.jar"/>
<jar href="pvjdbc2.jar"/>
<jar href="swing-layout-1.0.jar"/>
<extension name="additional" href="unsigned.jnlp"/>
</resources>
<applet-desc main-class="com.jdas.apps.binmgmt.gui.main.BinManagementApp" name="binMgmt" width="1024" height="768" >
</applet-desc>
</jnlp>
您需要签署JNLP文件,以便设置系统属性(除了那些具有特殊豁免的属性)。看看您正在尝试设置的一些属性!
要签名JNLP文件,在JNLP- inf/APPLICATION中放置一个字节对字节的副本(最好坚持使用US-ASCII(!))。
刚刚花了2天时间试图解决这个问题,试图签署jar和其他文件…然后我找到了解决方案,似乎很简单,工作得很好:
I *放一个jndi。在我的JRE-home-director*y (jre7/lib)中包含以下内容的properties-file:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
当从Java 1.6升级到Java 1.7时,我遇到了这个问题…