首先,对不起我的英语,这不是我的母语。
我的环境有:
- jre 1.5.0_12(二进制)
- jre 1.6.0_17(默认jre)
- jre 1.7.0_45(二进制)
我有两种方法可以通过Java Webstart启动应用程序:
1)\\<network filesystem>\javaws-1.5.0_12.exe \\<network filesystem>\urClient-DAP2.jnlp
2)"C:\Program Files\Java\jre1.5.0_12\bin\javaws.exe" "http://some-server.com/EU10.jnlp"
在安装Java 1.7之前,没问题。
但是由于我安装了JRE 1.7(只有二进制文件,并在注册表中注册),第二种方式不想下载JAR并执行应用程序。我只有Java启动画面 - “Java加载”出现然后在大约20秒内消失。
我找到了两个解决方法:
- 禁用或卸载JRE 1.7
- 或者最奇怪的方式:我启用 java console ....(deployment.console.startup.mode=SHOW
)
我被卡住了,这两个变通办法都不可行......
编辑: 在javaws trace中我得到了这个例外:
`Exception in thread "javawsApplicationMain" java.lang.NullPointerException
at javax.swing.SwingUtilities.appContextGet(Unknown Source)
at javax.swing.UIManager.getLAFState(Unknown Source)
at javax.swing.UIManager.maybeInitialize(Unknown Source)
at javax.swing.UIManager.getLookAndFeel(Unknown Source)
at com.sun.deploy.util.DeployUIManager.setLookAndFeel(Unknown Source)
at com.sun.javaws.ui.DownloadWindow.buildIntroScreen(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.handleApplicationDesc(Unknown Source)
at com.sun.javaws.Launcher.handleLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)`
编辑2: 我发现通过网络文件或http:
之间的区别通过HTTP(不要下载jar):
cache: User cache dir = C:\Documents and Settings\U01E519\Application Data\Sun\Java\Deployment\cache\javaws
cache: System cache dir = C:\Program Files\Java\jre1.5.0_12\cache\javaws
cache: Muffin Cache = C:\Documents and Settings\U01E519\Application Data\Sun\Java\Deployment\cache\javaws\muffins
basic: Java part started
basic: jnlpx.jvm: C:\Program Files\Java\jre1.7.0_45\bin\javaw.exe
basic: jnlpx.splashport: 3611
basic: jnlpx.remove: false
basic: jnlpx.heapsize: NULL,NULL
通过网络文件(下载jar和启动应用程序):
cache: User cache dir = C:\Documents and Settings\U01E519\Application Data\Sun\Java\Deployment\cache\javaws
cache: System cache dir = C:\Program Files\Java\jre1.5.0_12\cache\javaws
cache: Muffin Cache = C:\Documents and Settings\U01E519\Application Data\Sun\Java\Deployment\cache\javaws\muffins
basic: Java part started
basic: jnlpx.jvm: C:\Program Files\Java\jre1.5.0_12\bin\javaw.exe
basic: jnlpx.splashport: 3831
basic: jnlpx.remove: true
basic: jnlpx.heapsize: 64m,256m
参数jnlpx.jvm是不同的,我不知道为什么当我尝试使用http访问jnlp jvm是1.7时,我想使用1.5代替。
编辑3: 我解决了EDIT 2的问题,现在我使用bat运行java web start:
`@echo off
set JRE_HOME="C:\Program Files\Java\jre6"
echo %JRE_HOME%
set ARG=%ARG% -Xbootclasspath/a:%JRE_HOME%\lib\javaws.jar;%JRE_HOME%\lib\deploy.jar
set ARG=%ARG% -classpath %JRE_HOME%\lib\deploy.jar
set ARG=%ARG% -Djnlpx.home=%JRE_HOME%\bin
set ARG=%ARG% -Djnlpx.slashport=1322
set ARG=%ARG% -Djnlpx.jvm=%JRE_HOME%\bin\javaw.exe
set ARG=%ARG% -Djnlpx.remove=false
echo %ARG%
%JRE_HOME%\bin\javaw.exe %ARG% com.sun.javaws.Main "PRC_ApplicationInstruction1.6.jnlp"`
在JNLP文件中,永远不要使用<j2se version="1.6+">
,而是使用<j2se version="1.6">
提前致谢。
答案 0 :(得分:3)
== 第1步
您的问题仅来自java 7u45安全性。首先,尝试将此属性添加到您的罐子中:
Permissions: all-permissions
Codebase: *
Trusted-Library: true
这可能就足够了,并且会清除安全警告。
== 第2步
如果还不够:7u45不会将非安全属性传输到您的应用程序,除非JNLP已签名(即:Eclipse RCP中的osgi bundle-list)。所以尝试签署你的JNLP。
== 第3步
如果您无法签署JNLP ^^您可以通过在名称的开头添加“jnlp”将您的非安全属性转换为安全属性
关于该漏洞的Oracle文档: http://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/settingArgsProperties.html
答案 1 :(得分:1)
最后,我以这种方式解决了所有问题:
我使用bat运行java web start:
`@echo off
set JRE_HOME="C:\Program Files\Java\jre6"
echo %JRE_HOME%
set ARG=%ARG% -Xbootclasspath/a:%JRE_HOME%\lib\javaws.jar;%JRE_HOME%\lib\deploy.jar
set ARG=%ARG% -classpath %JRE_HOME%\lib\deploy.jar
set ARG=%ARG% -Djnlpx.home=%JRE_HOME%\bin
set ARG=%ARG% -Djnlpx.slashport=1322
set ARG=%ARG% -Djnlpx.jvm=%JRE_HOME%\bin\javaw.exe
set ARG=%ARG% -Djnlpx.remove=false
echo %ARG%
%JRE_HOME%\bin\javaw.exe %ARG% com.sun.javaws.Main "PRC_ApplicationInstruction1.6.jnlp"`
在JNLP文件中,永远不要使用<j2se version="1.6+">
,而是使用<j2se version="1.6">