我在使用 javaws 实用程序时遇到了一个相当神秘的问题,并且不知道我应该如何着手调查根本原因。
这是我设法收集的信息:
$ cat /etc/os-release
ID=wrlinux
NAME=Wind River Linux
VERSION=6.0.0.17
VERSION_ID=6.0.0.17
PRETTY_NAME=Wind River Linux 6.0.0.17
$ rpm -qa | grep jdk
jdk-fonts-1.5.0-u19r0.0.lib32_x86
jdk-plugin-1.5.0-u19r0.0.lib32_x86
jdk-1.5.0-u19r0.0.lib32_x86
jdk-dev-1.5.0-u19r0.0.lib32_x86
jdk7-1.7.0-u51r2.0.lib32_x86
jdk7-plugin-1.7.0-u51r2.0.lib32_x86
jdk7-fonts-1.7.0-u51r2.0.lib32_x86
jdk7-dev-1.7.0-u51r2.0.lib32_x86
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:$HOME:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin
(由于机密原因,我在这里剥离了部分路径)
我目前有 2 个版本可用,但只有 1.7 应该处于活动状态。我应该升级Java版本,但几乎在最后出现了那个错误。
首先,应该按预期工作的命令如下:
$ javaws http://link_to_file.jnlp
以下是我执行的命令,下面有一些额外的解释:
$ javaws http://link_to_file.jnlp
Disabling Java as it is too old and likely to be out of date. To reenable use jcontrol utility
这实际上不会禁用 Java,并且多次执行该命令会产生相同的结果。
$ javaws -verbose http://link_to_file.jnlp
Java(TM) Web Start 10.51.2.13-fcs Launching: /usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
-classpath
/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/deploy.jar
-Djava.security.policy=file:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/security/javaws.policy
-DtrustProxy=true
-Xverify:remote
-Djnlpx.home=/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin
-Djnlpx.origFilenameArg=http://link_to_file.jnlp
-Djnlpx.remove=false
-Dsun.awt.warmup=true
-Xbootclasspath/a:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/javaws.jar:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/deploy.jar:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/plugin.jar
-Djnlpx.splashport=40783
-Djnlpx.jvm=/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
com.sun.javaws.Main
-verbose
-notWebJava
http://link_to_file.jnlp
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
使用详细信息给了我预期的行为。这有多奇怪?!
……变得更有趣了……
$ which javaws
/usr/bin/javaws
$ file /usr/bin/javaws
/usr/bin/javaws: symbolic link to `/usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws'
$ /usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws http://link_to_file.jnlp
Disabling Java as it is too old and likely to be out of date. To reenable use jcontrol utility
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
$ /usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws http://link_to_file.jnlp
This application cannot be downloaded because Java has been disabled through the web. You can enable Java on this system using the Java Control Panel.
此命令成功禁用 Java,我必须使用 jcontrol(控制面板)手动启用它
$ /usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws -verbose http://link_to_file.jnlp
Java(TM) Web Start 10.51.2.13-fcs Launching: /usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
-classpath
/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/deploy.jar
-Djava.security.policy=file:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/security/javaws.policy
-DtrustProxy=true
-Xverify:remote
-Djnlpx.home=/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin
-Djnlpx.origFilenameArg=http://link_to_file.jnlp
-Djnlpx.remove=false
-Dsun.awt.warmup=true
-Xbootclasspath/a:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/javaws.jar:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/deploy.jar:/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/lib/plugin.jar
-Djnlpx.splashport=43537
-Djnlpx.jvm=/usr/lib/jvm/java-1.7.0-linux-1.7.0.51/jre/bin/java
com.sun.javaws.Main
-verbose
-notWebJava
http://link_to_file.jnlp
Picked up JAVA_TOOL_OPTIONS: -Djava.vendor="Sun Microsystems Inc."
再次使用详细信息给了我预期的行为。
概括:
javaws和/usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws有不同的行为,尽管 javaws 是 /usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws 的符号链接。
使用-verbose选项给了我们不同的(预期的)行为。
有谁知道为什么详细的行为不同,有没有办法让它的行为成为默认行为?
非常感谢大家,很抱歉这么长的帖子。我只是想足够具体。:)
最好的问候,特奥多