5

我在使用 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."

再次使用详细信息给了我预期的行为。

概括:

  1. javaws/usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws有不同的行为,尽管 javaws 是 /usr/lib/jvm/jre-1.7.0.51-linux/bin/javaws 的符号链接。

  2. 使用-verbose选项给了我们不同的(预期的)行为。

有谁知道为什么详细的行为不同,有没有办法让它的行为成为默认行为?

非常感谢大家,很抱歉这么长的帖子。我只是想足够具体。:)

最好的问候,特奥多

4

0 回答 0