4

我们正在使用基于 Web 的 KVM 切换器,它会打开 Java Web Start 启动器以启动控制台。当我使用 Java 6 更新 43 运行它时,一切正常。然后,我在旁边安装 Java 7 update 17,它得到一个套接字连接错误。我冒昧地编写了一个简单的批处理脚本,它强制选择 Java 主页以及 Web 启动应用程序。然后我保存了下载的 jnlp 文件,以便我可以随意调用它。我绝不是 Java 开发人员,因此对于任何冒犯性的做法,我深表歉意。

set JAVA_HOME="C:\Program Files (x86)\Java\jre6"
%JAVA_HOME%\bin\javaws.exe   "C:\opt\kvm\ui.jnlp"

这是我收到的连接异常。

java.io.IOException: JNLP Jar download failure.
at com.sun.javaws.LaunchDownload.validateResults(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)'

我想知道您是否知道安装多个 Java 版本时 Java 会有不同行为的任何原因?我能想到的最好的解释是图书馆冲突。如果是这种情况,那么我需要找到一种方法来手动设置库路径,以便只调用 Jre6 dlls/tools。如果有人有任何建议,我将不胜感激。我还附上了内部 jnlp 数据。非常感谢您的宝贵时间。

<?xml version="1.0" encoding="utf-8"?>
<!-- JNLP File IRP EMS     -->
<jnlp
  spec="6.0+"
  codebase="https://<IP-Address>">
  <information>
    <title>TrippLite UI</title>
    <vendor>TrippLite</vendor>
    <homepage href="http://www.tripplite.com"/>
    <description kind="short">TrippLite Manager</description>
    <icon href="minicom_desktop.gif"/> 
  </information>

  <security>
      <all-permissions/>
  </security>
  <resources>
    <j2se version="1.6+" initial-heap-size="256m" java-vm-args="-Xnoclassgc -    XX:PermSize=64m" 
        href="http://java.sun.com/products/autodl/j2se"/> 
        <jar href="./boot.jar"/>
    <jar href="./app.jar"/>
    <jar href="./vendor.jar"/>
    <jar href="./miglayout15-swing.jar"/>
    <jar href="./jnlp.jar"/>
<jar href="./xstream-1.3.1.jar"/>
<jar href="./xpp3_min-1.1.4c.jar"/>
<nativelib href="./plugin.jar"/>

    <property name="devport" value="900"/>       
  </resources>
  <application-desc main-class="com.minicom.app.video.ui.ShowLogin">
  </application-desc>
</jnlp> 

更新

我使用 -verbose 运行脚本并得到以下输出。我是新来的,所以我不能发布图片。链接在这里。

https://raw.github.com/marvins/temp_images/master/with_setting.png

现在看来问题是因为 vm 正在调用 jre7 的 javaw.exe 文件。你知道我如何覆盖“-Djnlpx.jvm=C:\Program Files (x86)\Java\jre7\bin\javaws.exe 并用 jre6 替换它吗?我正在尝试使用不同形式的“-J- Djnlpx.jvm=" 并且它的外观类似于下面的。它在那里显示它,但不会替换该值。

有没有更合适的方法来强制正确的 javaws?

%JAVA_HOME%\bin\javaws.exe  "-J-Djnlpx.jvm=C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -verbose "C:\opt\kvm\ui.jnlp"
4

1 回答 1

2

在四处挖掘之后,我卸载了 Java 7,得到了一个工作配置,使用 javaws.exe 复制了 -verbose 的输出,然后将其集成到我的脚本中。最后,我重新安装了所有 java 版本,它现在可以工作了。这是我的脚本。

set JAVA_HOME="C:\Program Files (x86)\Java\jre6"
set CLASSPATH=%JAVA_HOME%\lib\deploy.jar

set BOOTCP=%JAVA_HOME%\lib\javaws.jar;%JAVA_HOME%\lib\deploy.jar;%JAVA_HOME%\lib\plugin.jar
set SECPOL=file:%JAVA_HOME%\lib\security\javaws.policy
set SPLASHPORT="-Djnlpx.splashport=49688"

%JAVA_HOME%\bin\javaw.exe -Xbootclasspath/a:%BOOTCP% -classpath %CLASSPATH% -Djava.security.policy=%SECPOL% -DtrustProxy=true -Xverify:remote -Djnlpx.home=%JAVA_HOME%\bin -Dsun.aws.warmpu=true -Djnlpx.origFilenameArg=C:\opt\kvm\ui.jnlp -Djnlpx.remove=false -Xnoclassgc -XX:PermSize=64m -Xms1028m -Djnlpx.heapsize=1028m,NULL %SPLASHPORT% com.sun.javaws.Main C:\opt\kvm\ui.jnlp

它非常丑陋,但这就是它所要求的逐字记录。我没有意识到所有的 java 工具都是同一个 JVM 调用,只是对 main.js 进行了修改。现在说得通了,但作为一个 C++ 人,这东西有点神奇。

它仍然没有回答如何仅使用 javaws 自己配置它,但它确实使用它的输出解决了问题。

再次感谢你的帮助。

于 2013-03-13T02:09:17.890 回答