IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Comment forcer un .JAR à utiliser une version Java 1.7 et JavaFx 2.2


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut Comment forcer un .JAR à utiliser une version Java 1.7 et JavaFx 2.2
    Bonjour,

    Voici pour commencer une application très simple qui contient du FX et du swing:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
     
     
    public class myMain {
     
    	public static void main(String[] args) {
     
     
            JDialog dlg = new JDialog();
          dlg.setSize(1000, 1000);
     
          ObservableList<String> olData = FXCollections.observableArrayList();
          olData.add("CECI vient de FX");
          olData.add("et oui de FX !");
     
     
      String myFxVersion = com.sun.javafx.runtime.VersionInfo.getRuntimeVersion().toString();
      String myJavaVersion = System.getProperty("java.runtime.version");
     
      JLabel AAfficherLbl ="**" +  new JLabel(olData.get(0).toString() + "**       Version Java =  " + myJavaVersion + "         Version FX  " + myFxVersion);
      System.out.println(AAfficherLbl.getText());
      dlg.add(AAfficherLbl);      
          dlg.setVisible(true);
     
    	}
     
    }
    l'exécution de ce code retourne chez moi:
    **CECI vient de FX** Version Java = 1.7.0_80-b15 Version FX 2.2.80-b14
    Vous constaterez que la version de java est 1.7 et que FX est en 2.2.
    Ce sont les versions que nous devons employer après déploiement aux fins de compatibilité avec le serveur (WebSphere) et ce sont les versions qui sont dans le java build path de mon Eclipse.

    Mon but est de pouvoir déployer via JavaWebStart mais dans un premier temps, je voudrais déjà pouvoir exécuter un JAR en 1.7 et 2.2 (comme dans mon Eclipse)

    Voici comment je m'y prends...

    En Eclipse,
    je clique droit sur mon projet
    je choisis "Export"
    Dans "Select an export destination", je choisis "Java" et puis "Jar file"

    "monProjet", "classpath", ".project" et "build.fxbuild" sont cochés par défaut

    "Export generated class files and resources" est coché (je ne coche pas "Export Java source files and resources")

    Je donne un nom et une destination à mon fichier et je pousse sur "next" et encore "next" pour arriver sur

    JAR Manifest Specification avec:
    - je coche "Generate the manifest file" et je le nomme "MyManifest"
    - je laisse le choix sur 'Seal some packages"
    - j'indique le nom de ma Main class : "myMain"

    et enfin, "Finish"

    A ce moment, mon classPath vaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
    	<classpathentry kind="src" path="src"/>
    	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    	<classpathentry kind="lib" path="C:/Program Files (x86)/Java/jdk1.7.0_80/jre/lib/jfxrt.jar"/>
    	<classpathentry kind="output" path="bin"/>
    </classpath>
    et mon Manifest vaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Manifest-Version: 1.0
    Main-Class: myMain
    Si maintenant je clique directement sur mon fichier SwingWithFX.jar, l'application fonctionne bien mais avec les versions installées sur mon PC.
    Il s'affiche donc
    CECI vient de FX Version Java = 1.8.0_71-b15 Version FX 8.0.71-b14
    ce qui ne m'arrange pas du tout.

    Il ne tient donc pas compte du Path qui est dans mon classPath ci-avant.

    Pour pallier à cela, je fais un petit fichier.bat qui contient le path.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SET PATH="C:\Program Files (x86)\Java\jdk1.7.0_80\jre\bin"
    java.exe -version
    pause
    java -jar SwingWithFX.jar
    pause
    à ce moment il exécute bien la version 1.7.0.80 de java mais comment lui dire de prendre FX 2.2 ?

    Enfait il m'affiche bien dans la console la version java 1.7, mais il ne trouve plus du tout FX et me génère donc une ClassNotFoundException: javafx.collections.FXCollections


    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Golzinne Voir le message
    Ce sont les versions que nous devons employer après déploiement aux fins de compatibilité avec le serveur (WebSphere)
    Tu peux expliquer le lien là? Swing et javaFX tournent coté client, c'est la jvm client qui est impacté. Websphere il tourne coté serveur. Ton serveur pourrait tourner en ruby, swing et javaFX n'en ont rien à cirer.

    Il ne tient donc pas compte du Path qui est dans mon classPath ci-avant.
    Non, on ne peux pas à ma connaissance forcer une version spécifique de java directement dans un jar. Il faut passer par un descripteur de déploiement genre webstart pour forcer certaines versions des librairies.


    à ce moment il exécute bien la version 1.7.0.80 de java mais comment lui dire de prendre FX 2.2 ?
    Il me semble, mais je peux dire des bêtsises car je ne fais pas de javafx, qu'il faut des entrées spécifiques dans le MANIFEST.MF pour que java reconnaisse ça comme une application javafx:

    JavaFX-Version: 2.2
    JavaFX-Application-Class: package.MyMain
    JavaFX-Class-Path: librairies/additionnelle.jar

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu peux expliquer le lien là? Swing et javaFX tournent coté client, c'est la jvm client qui est impacté. Websphere il tourne coté serveur. Ton serveur pourrait tourner en ruby, swing et javaFX n'en ont rien à cirer.
    WebSphere ne tourne pas encore en 1.8.

    Il y a des méthodes qui s'exécutent à la fois sur le client et sur le serveur ==> pas de 1.8 (malheureusement) sur le client

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    même si ton websphere tourne en 1.7 et que c'est compilé avec javac 1.7, je ne vois pas ce qui empêche le client de tourner une jvm 1.8. D'autant que la 1.7 est end of life, ce qui signifie que c'est un trou de sécurité de tourner ça sur un desktop.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Nous n'avons pas la main sur la configuration WebSphere. On nous impose d'utiliser une version identique de java sur le client que sur le WebSphere (nécessaire pour les EJBs parait-il)...

    Pour revenir au sujet, j'arrive bien à packager mon mini projet en utilisant la méthode décrite dans ce lien http://code.makery.ch/library/javafx-2-tutorial/part7/ et il utilise dans ce cas la bonne version Java et javaFx. Mais si je veux utiliser la même méthode pour mon projet lié à WebSphere, ça plante...

    En fait ma méthode préférée serait celle du point 10.3 de la doc http://docs.oracle.com/javafx/2/depl...s.htm#CIHECFCB

    Mais comment trouver plus d'info sur la manière de procéder (notamment pour indiquer quelles versions Java prendre)

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    dans un jnlp, c'est le tag resources => j2se qui spécifie la version à utiliser. Exemple
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <resources>
        <j2se version="1.7" href="http://java.sun.com/products/autodl/j2se"/>
    </resources>
    cf http://docs.oracle.com/javase/7/docs...html#resources

    Je rappelle quand même qu'avec java sur les desktop users, les ancienne versions non supportées de la jvm ont deux fâcheuses tendances:
    1) se désinstaller toutes seules par sécurité
    2) bloquer tout accès privilégié à la machine (disque, réseau), même si l'appli est signée.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2010, 13h59
  2. Réponses: 0
    Dernier message: 25/06/2009, 18h26
  3. Comment utiliser une classe Java dans une appli PB ?
    Par bobychezA56 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 09/04/2008, 18h07
  4. Réponses: 0
    Dernier message: 31/03/2008, 11h36
  5. créer un jar d'une appli java utilisant d'autres jar
    Par jakouz dans le forum Général Java
    Réponses: 2
    Dernier message: 14/02/2007, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo