4

コンソールを起動するためにJavaWebStartランチャーを開くWebベースのKVMスイッチを使用しています。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 dll/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を使用してスクリプトを実行すると、次の出力が得られました。SOは初めてなので、画像を投稿できません。ここにリンクがあります。

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をアンインストールし、動作する構成を取得し、-verboseの出力をjavaws.exeでコピーして、それをスクリプトに統合しました。最後に、すべての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呼び出しであることに気づきませんでした。今では理にかなっていますが、C ++の人としては、これはちょっとした魔法です。

それでも、javawsのみを使用してこれを自分で構成する方法については回答していませんが、その出力を使用して問題を解決します。

よろしくお願いします。

于 2013-03-13T02:09:17.890 に答える