L'application Java Web Start fonctionne avec Java 6, mais uniquement si Java 7 est complètement désinstallé. (Win7)


Nous utilisons un commutateur KVM basé sur le Web qui ouvre un lanceur de démarrage Web Java afin de démarrer la console. Quand je l'exécute avec Java 6, mise à jour 43, tout fonctionne très bien. Ensuite, j'installe Java 7 update 17 à côté, et il obtient une erreur de connexion socket. J'ai pris la liberté d'écrire un script batch simple qui choisit de force la maison Java ainsi que l'application Web start. J'ai ensuite enregistré le fichier jnlp qui est téléchargé afin que je puisse l'appeler sur un coup de tête. Je suis en aucun cas un développeur Java, donc je m'excuse pour toute pratique offensante.

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

Voici l'exception de connexion que je reçois.

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)'

Je me demandais si vous connaissez des raisons pour lesquelles Java aurait un comportement différent lorsque plusieurs versions de Java sont installées? La meilleure explication que je puisse trouver est qu'il y a une collision de bibliothèque. Si tel est le cas, je dois trouver un moyen de définir manuellement le chemin de la bibliothèque de telle sorte que seules les dll/outils Jre6 seront appelé. Si quelqu'un a des conseils, je serais extrêmement reconnaissant. J'ai également joint les données jnlp internes. Je vous remercie beaucoup pour votre temps.

<?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> 

Mise à jour

J'ai exécuté le script avec-verbose et j'ai obtenu la sortie suivante. Je suis nouveau sur SO, donc je ne peux pas poster d'images. Voici le lien.

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

Il semble maintenant que le problème est dû au fait que la machine virtuelle fait appel à javaw de jre7.EXE. Savez-vous comment je pourrais remplacer le "-Djnlpx.jvm=C:\Program Files (x86)\Java\jre7\bin \ javaws.exe et le remplacer par jre6? J'essaie d'utiliser différentes formes de "-J-Djnlpx.jvm= " et il donne une apparence similaire à celle ci-dessous. Il montre, mais ne remplace pas la valeur.

Existe-t-il un moyen plus approprié de forcer les javaws appropriés?

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

1 answers

Après avoir creusé, j'ai désinstallé Java 7, obtenu une configuration de travail, copié la sortie de-verbose avec les javaws.exe, puis intégré dans mon script. Enfin, j'ai réinstallé toutes les versions de java et cela fonctionne maintenant. Voici mon script.

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

, Il est très laid, mais c'est textuellement ce qu'elle voulait. Je ne me suis pas rendu compte que tous les outils java sont juste le même appel JVM avec des modifications au principal. Cela a du sens maintenant, mais en tant que gars C++, ce genre de choses est un peu magique.

Il ne répond toujours pas comment configurer cela vous-même en utilisant uniquement javaws, mais il résout le problème en utilisant la sortie de celui-ci.

Merci encore pour votre aide.

 2
Author: msmith81886, 2013-03-13 02:09:17