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 :

JavaFX sur mobile avec JavaFXPorts


Sujet :

JavaFX

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut JavaFX sur mobile avec JavaFXPorts
    Bonjour,

    Quelqu'un pourrait-il m'indiquer la marche à suivre pour faire fonctionner un projet sous PC ET Android (éventuelement iOS) avec la même structure de projet (dossier, fichier, classes, FXML, etc...) avec JavaFXPorts ?

    Je sais bien qu'il existe Gluon Mobile qui est l'extension commerciale de JavaFXPorts mais j'ai pas envie de payer 499 $ par an.

    Pour vérifier la faisabilité j'utilise NetBeans et je crée le project JavaFX avec FXML de base.

    Cela fonctionne évidement parfaitement sous PC.

    Après des heures de tests et de lectures de doc/tutoriels je n'arrive à faire ce que je veux...

    Question subsidiaire : est-il possible d'utiliser aussi les composants ControlsFX avec cela ?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    L'ennui c'est que je suis toujours passe par Gluon pour faire cela donc j'ai droit a la boite de dialogue de démarrage donc en attendant de trouver comment faire et pour tester, tu peux quand meme utiliser Gluon Mobile en mode gratuit.
    Le seul moment ou j'ai utiliser uniquement javafxports sans passer par Gluon c'est pour faire tourner des trucs sur ARM via sa version Embedded. Comme la y a rien besoin de compiler en natif, faut juste rajouter les libs sur le classpath. Mais bon ce n'est pas ce que tu cherches.

    Ce que j'ai fait :
    • Je suis allé chez Gluon pour télécharger la derniere version de JavaFXports pour Android que j'ai dézippé dans un répertoire.
    • Je suis allé dans le répertoire dalvik-sdk\samples\HelloWorld\javafx
    • J'ai lancé gradlew et ai patienté le temps de la maj de graddle.
    • J'ai eut une erreur qui me disait qu'il ne connaissait pas le JDK 9.0.1 donc j'ai change la valeur de mon JAVA_HOME pour pointer sur le JDK 8_144 a la place
    • J'ai relancé gradlew qui alors a débuté le téléchargement de ses dépendances.
    • J'ai eut un message me d'erreur disant qu'ANDROID_HOME n’était pas défini.
    • J'ai donc édité le fichier local.properties a la racine du projet pour redéfinir sdk.dir et javafx.dir (sous Windows echapper les \ en \\).
    • J'ai relancé gradlew qui m'a dit que tout etait fini.
    • Mais ensuite en lancant gradlew tasks ou gradlew assembleDebug (mentionne dans README) j'ai l'erreur suivante :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      > failed to find Build Tools revision 21.1.1
    • J'ai donc du lancer AndroidStudio -> Configure -> SDK Manager -> SDK Tooks -> Show Package Details et installer les build tools 21.1.1 (Obsolete)
    • Une fois ceci fait, gradlew assembleDebug fonctionne et crée un fichier APK dans le répertoire build\outputs\apk
    • Malheureusement lorsqu'on essaie de lancer cette app sur un téléphone, elle se termine immédiatement.


    Ensuite, comme ça m'avait frustré, j'ai décidé de cloner directement un de leurs exemples standalone, la démo Ensemble. Du coup avec cette demo comme tout est decrit en dépendances dans build.graddle pas besoin d'avoir javafxports manuellement installer ou de redéfinir ANDROID_HOME. Par contre il faut toujours s'assurer que JAVA_HOME pointe bien vers le JDK 8.
    • Aucun soucis pour exécuter la version desktop en faisant gradlew runNom : ensemble-desktop.jpg
Affichages : 1459
Taille : 90,2 Ko
    • Mais en faisant gradlew androidInstall j'ai l'erreur :
      > Cannot expand ZIP 'C:\Users\<profile>\AppData\Local\Android\Sdk\extras\android\support\multidex\library\libs\android-support-multidex.jar' as it does not exist.
    • Pour avancer plus loin dans le fichier build.graddle, j'ai remplace :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      classpath 'org.javafxports:jfxmobile-plugin:1.0.7'
      par (en m'inspirant d'un projet de test Gluon plus recent) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      classpath 'org.javafxports:jfxmobile-plugin:1.3.6'
    • Et après déploiement de l'application sur le téléphone, puis son lancement, j'ai eut droit a... un très joli écran noir...
    • J'ai procédé a un petit nettoyage gradle clean, gradle cleanBuildCache et j'ai recommencé a compiler et.... TINLIN !!!!!
      Nom : ensemble-mobile.jpg
Affichages : 1459
Taille : 89,8 Ko


    Voila donc le projet Ensemble est probablement une bonne base pour une nouvelle application. Par contre pour le coup c'est vraiment une application pure (extends Application) et non pas un truc qui tourne sur la surcouche Gluon Mobile (extends MobileApplication ou extends View) donc y a 0 intégration avec Android (même si la touche <- fonctionne cependant, faudra voir le code source sur le pourquoi du comment). Donc pour tout ce qui est GPS ou les divers services platform agnostic ou les controles custom mobiles fournis par la surcouche Gluon, ben faudra chercher des alternatives pour invoquer qq chose de similaire...

    Et j'ai pas tester avec la VM Gluon supportant le JDK 9 paske bon j'avais pas que ca a faire et ca rajoute pas mal de dependances...

    Et j'ai pas teste sur iOS non plus

    Sinon oui en theorie ControlsFX et n'importe quelle lib Java qui n'utilise pas de natif ou d'invokeDynamic fonctionne mais après faut tester au cas par cas et surtout dans le cas de controles graphiques, verifier sur leur fonctionnement, position, apparence, etc. fonctionne sur une plateforme mobile.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Merci beaucoup de tes efforts.

    C'est une piste.

    Mais y a pas de FXML avec ça...

    J'ai pas envie de me farcir toutes les constructions UI à la main...

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je ne vois pas du tout ce qui empêcherai de mettre du FXML dedans (après tous Gluon le fait très bien pour les apps de son framework). Tu as un début de piste, à toi de tester plus en avant !
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    J'essaie de faire un test sous Windows 10 avec l'arborescence nécessaire à Gradle...mais sans succes.

    Voici l'arborescence : Nom : arbo.PNG
Affichages : 1348
Taille : 11,0 Ko

    Et voici le code de JavaFXTest.java :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package main.java.javafxtest;
     
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
     
    /**
     *
     * @author Carlo
     */
    public class JavaFXTest extends Application {
     
        @Override
        public void start(Stage stage) throws Exception {
     
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("FXMLDocument.fxml"));
            Parent root = loader.load();         
     
            Scene scene = new Scene(root);
     
            stage.setScene(scene);
            stage.show();
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            launch(args);
        }
     
    }
    et voici l'erreur :

    Exception in Application start method
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
    Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.IllegalStateException: Location is not set.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
    at main.java.javafxtest.JavaFXTest.start(JavaFXTest.java:25)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    ... 1 more
    Exception running application main.java.javafxtest.JavaFXTest

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Le chemin d’accès de ton FXML ne semble pas valide. As-tu vérifié que l'URL retournée n'est pas null ? Essaie avec "/FXMLDocument.fxml".
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Moi je ferais ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    loader.setLocation(getClass().getResource("../resources/FXMLDocument.fxml"));
    Le truc chiant quand on a pas le .fxml et le controller dans le même package, c'est que le scene builder ne trouve pas les fx:id automatiquement Mais bon tu n'utilises peut-être pas le scene builder.

  8. #8
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Tous les chemins qui suivent donne un URL null

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
            Parent root = FXMLLoader.load(getClass().getResource("/FXMLDocument.fxml"));
            Parent root = FXMLLoader.load(getClass().getResource("/resources/FXMLDocument.fxml"));
            Parent root = FXMLLoader.load(getClass().getResource("//resources/FXMLDocument.fxml"));
            Parent root = FXMLLoader.load(getClass().getResource("..resources//FXMLDocument.fxml"));
    Si je mets le fichier FXMLDocument.fxml au même endroit que JavaFXTest.java alors cela fonctionne dans NetBeans.

    Mais avec "Gradle run" cela me donne la même erreur...URL = null
    J'ai même copier le fichier dans resources mais "Gradle run" donne toujours la même erreur...URL = null


    De plus en plus bizarre.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    A mon avis c'est juste un problème de chemin relatif ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "..//resources//FXMLDocument.fxml"
    "../resources/FXMLDocument.fxml"
    C'est bizarre qu'aucun de ces deux ci ne fonctionnent pour toi

  10. #10
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "../resources/FXMLDocument.fxml"
    "..//resources/FXMLDocument.fxml"
    URL = null

    Il doit bien y avoir moyen d'avoir une arborescence qui fonctionne en Desktop et avec Gradle...

    A l'aide...

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par genamiga Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "../resources/FXMLDocument.fxml"
    URL = null

    Il doit bien y avoir moyen d'avoir une arborescence qui fonctionne en Desktop et avec Gradle...

    A l'aide...
    Ah mais il est deux fois en arrière en fait (si je ne suis pas bigleux !)

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "../../resouces/FXMLDocument.fxml"
    (revenir deux fois en arrière, pour être dans le dossier /main/ puis choper le dossier /resources/ et enfin ton fichier fxml)
    (ou doubles /, ça c'est à toi de voir)

  12. #12
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "../../resources/FXMLDocument.fxml"
    URL = null

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par genamiga Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "../../resouces/FXMLDocument.fxml"
    URL = null
    Edit : trompé. Au pire essaye le chemin absolu :/

  14. #14
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    J'ai trouvé...

    Il faut, dans le projet NetBeans, ajouter explicitement le dossier "src\main\resources" dans sources package folder et le chemin à donner est :

    Avec ça, ça fonctionne en Desktop et avec gradle.

    Maintenant j'ai un autre soucis en allant plus avant dans mes tests.

    Mais je vais ouvrir une autre discussion pour ça.

  15. #15
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Hum, du coup ca semble plus être un soucis de NetBeans qui ne prenait pas le contenu du dossier en compte qu'autre chose.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  16. #16
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    PS : au niveau des versions de JavaFX ports, la dernière en date pour la série 1.3.x est la 1.3.11 (voir Maven) qui nécessite le SDK Android 27.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  17. #17
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Par contre avec JavaFX Mobile Plugin 2.x...ça fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Could not resolve all artifacts for configuration ':classpath'.
       > Could not find com.gluonhq:gvmbuilder:0.0.29.
         Searched in the following locations:
             https://jcenter.bintray.com/com/gluonhq/gvmbuilder/0.0.29/gvmbuilder-0.0.29.pom
             https://jcenter.bintray.com/com/gluonhq/gvmbuilder/0.0.29/gvmbuilder-0.0.29.jar
         Required by:
             project : > org.javafxports:jfxmobile-plugin:2.0.24

  18. #18
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Bon j'ai un peu avance sur le problème même si c'est pas parfait. Je suis reparti de l'exemple Ensemble puisqu'on sait déjà qu'il fonctionne bien en plugin 1.3.x

    Déjà, il faut passer a une version plus récente de Gradle, en allant modifier gradle/wrapper/gradle-wrapper.properties :

    Code text : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #Thu Jan 22 15:20:41 CET 2015
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    #distributionUrl=http\://services.gradle.org/distributions/gradle-2.2-bin.zip
    distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip

    Ensuite j'ai modifie le fichier build.graddle en m'inspirant du fichier d'un projet Gluon VM 2 créé via un IDE :

    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
    33
    34
    35
    36
    37
    buildscript {
        repositories {
            jcenter()
    	google()
            maven {
                url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
            }	
        }
     
        dependencies {
    	//classpath 'org.javafxports:jfxmobile-plugin:1.3.11'
    	classpath 'org.javafxports:jfxmobile-plugin:2.0.19'
        }
    }
     
    apply plugin: 'org.javafxports.jfxmobile'
     
    mainClassName = 'ensemble.EnsembleApp'
     
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
     
    repositories {
        jcenter()
        maven {
            url 'http://nexus.gluonhq.com/nexus/content/repositories/releases'
        }
    }
     
    jfxmobile {
        ios {
            forceLinkClasses = ['ensemble.**.*']
        }
        android {
            applicationPackage = 'org.javafxports.ensemble'
        }
    }
    Ah oui, et pour que ça compile cette fois-cil il faut utiliser le JDK 9, pas le JDK 8 !

    Déjà ça passe les soucis précédents mais juste après ça bloque sur le fait qu'il ne trouve pas une partie des classes JavaFX :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    > ./gradlew run
     
    > Task :compileJava
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BendingPages.java:50: error: cannot find symbol
    import javafx.scene.shape.PathBuilder;
                             ^
      symbol:   class PathBuilder
      location: package javafx.scene.shape
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\HomePage.java:51: error: cannot find symbol
    import javafx.scene.effect.BlendBuilder;
                              ^
      symbol:   class BlendBuilder
      location: package javafx.scene.effect
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\HomePage.java:53: error: cannot find symbol
    import javafx.scene.effect.DropShadowBuilder;
                              ^
      symbol:   class DropShadowBuilder
      location: package javafx.scene.effect
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\HomePage.java:55: error: cannot find symbol
    import javafx.scene.effect.InnerShadowBuilder;
                              ^
      symbol:   class InnerShadowBuilder
      location: package javafx.scene.effect
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:44: error: cannot find symbol
    import javafx.scene.control.ContextMenuBuilder;
                               ^
      symbol:   class ContextMenuBuilder
      location: package javafx.scene.control
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:45: error: cannot find symbol
    import javafx.scene.control.MenuItemBuilder;
                               ^
      symbol:   class MenuItemBuilder
      location: package javafx.scene.control
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samples\controls\dialog\DialogApp.java:58: error: package com.sun.javafx.scene.control.skin does not exist
    import com.sun.javafx.scene.control.skin.AccordionSkin;
                                            ^
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BendingPages.java:61: error: cannot find symbol
        private Path frontPageBack = PathBuilder.create()
                                     ^
      symbol:   variable PathBuilder
      location: class BendingPages
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BendingPages.java:66: error: cannot find symbol
        private Path shadow = PathBuilder.create()
                              ^
      symbol:   variable PathBuilder
      location: class BendingPages
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BendingPages.java:335: error: cannot find symbol
            animation = TimelineBuilder.create()
                        ^
      symbol:   variable TimelineBuilder
      location: class BendingPages
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BookBend.java:298: error: cannot find symbol
                    ArcToBuilder.create()
                    ^
      symbol:   variable ArcToBuilder
      location: class BookBend
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BookBend.java:307: error: cannot find symbol
                    ArcToBuilder.create()
                    ^
      symbol:   variable ArcToBuilder
      location: class BookBend
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BookBend.java:327: error: cannot find symbol
                        ArcToBuilder.create()
                        ^
      symbol:   variable ArcToBuilder
      location: class BookBend
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\control\BookBend.java:336: error: cannot find symbol
                        ArcToBuilder.create()
                        ^
      symbol:   variable ArcToBuilder
      location: class BookBend
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:122: error: cannot find symbol
            setContextMenu(ContextMenuBuilder.create()
                           ^
      symbol:   variable ContextMenuBuilder
      location: class PieChartDataVisualizer
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:124: error: cannot find symbol
                        MenuItemBuilder.create()
                        ^
      symbol:   variable MenuItemBuilder
      location: class PieChartDataVisualizer
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:142: error: cannot find symbol
                        MenuItemBuilder.create()
                        ^
      symbol:   variable MenuItemBuilder
      location: class PieChartDataVisualizer
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:152: error: cannot find symbol
                        MenuItemBuilder.create()
                        ^
      symbol:   variable MenuItemBuilder
      location: class PieChartDataVisualizer
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\samplepage\PieChartDataVisualizer.java:158: error: cannot find symbol
                        MenuItemBuilder.create()
                        ^
      symbol:   variable MenuItemBuilder
      location: class PieChartDataVisualizer
    C:\<username>\Devel\Java\test\gluon\Ensemble-2\src\main\java\ensemble\ScrollEventSynthesizer.java:216: error: cannot find symbol
                inertiaTimeline = TimelineBuilder.create()
                                  ^
      symbol:   variable TimelineBuilder
      location: class ScrollEventSynthesizer
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    20 errors
     
     
    FAILURE: Build failed with an exception.
     
    * What went wrong:
    Execution failed for task ':compileJava'.
    > Compilation failed; see the compiler error output for details.
     
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
     
    * Get more help at https://help.gradle.org
     
    BUILD FAILED in 4s
    1 actionable task: 1 executed
    Ce qui est normal puisque les builders ont été retirés dans le JDK 9... donc il faut s'atteler a la tache ardue de devoir modifier le code source de l'application et retirer aussi quelques imports désormais inutiles.

    Lorsque ceci est fait il est alors possible de lancer l'application en mode desktop meme si une exception se produit lorsqu'on clique sur l'exemple StackedAreaChart et quelques autres exemples ici et la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by ensemble.samplepage.PlaygroundTabs (file:/C:/<username>/Devel/Java/test/gluon/Ensemble-2/build/classes/java/main/) to field javafx.scene.chart.NumberAxis.forceZeroInRange
    WARNING: Please consider reporting this to the maintainers of ensemble.samplepage.PlaygroundTabs
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    Cette erreur ne se produit pas avec le JDK 8 / JavaFXports 1.3.x car probablement la structure interne de JavaFX a changé un peu en JDK 9 et donc une opération qui était effectuée par réflexion / introspection échoue désormais... Mais bon c'est pas grave CAR... CAR le port Android fonctionne très bien quand meme !

    Pour info le port vers Android fonctionnera pas si les deux lignes suivantes sont absentes du fichier build.graddle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    Si tu les supprimes tu obtiendras l'erreur suivante a la compilation pour Android.

    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
    Jun 04, 2018 2:00:03 PM org.javafxports.retrobuffer.Main main
    SEVERE: Failed to run Retrobuffer
    java.lang.IllegalArgumentException
    	at org.objectweb.asm.ClassReader.<init>(Unknown Source)
    	at org.objectweb.asm.ClassReader.<init>(Unknown Source)
    	at org.javafxports.retrobuffer.ClassAnalyzer.analyze(ClassAnalyzer.java:48)
    	at org.javafxports.retrobuffer.Retrobuffer$1.visitClass(Retrobuffer.java:59)
    	at org.javafxports.retrobuffer.ClasspathVisitor.visitFile(ClasspathVisitor.java:59)
    	at org.javafxports.retrobuffer.ClasspathVisitor.visitFile(ClasspathVisitor.java:41)
    	at java.base/java.nio.file.Files.walkFileTree(Files.java:2713)
    	at java.base/java.nio.file.Files.walkFileTree(Files.java:2785)
    	at org.javafxports.retrobuffer.Retrobuffer.run(Retrobuffer.java:56)
    	at org.javafxports.retrobuffer.Main.main(Main.java:45)
     
    :applyRetrobuffer FAILED
     
    FAILURE: Build failed with an exception.
     
    * What went wrong:
    Execution failed for task ':applyRetrobuffer'.
    > Process 'command 'C:\Program Files\Java\jdk-9.0.1\bin\java.exe'' finished with non-zero exit value 1
     
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
     
    * Get more help at https://help.gradle.org
     
    BUILD FAILED in 17s
    7 actionable tasks: 5 executed, 2 up-to-date
    Process 'command 'C:\Program Files\Java\jdk-9.0.1\bin\java.exe'' finished with non-zero exit value 1
    Cette erreur se produit car RetroBuffer ne peut fonctionner que sur du bytecode JDK 8, il échoue sur du bytecode JDK 9. Donc même si tu utilises le JDK 9 comme compilateur et si tu utilises l'API du JDK 9, javafxport creera un bytecode au format JDK 8. Rien de bien grave en soit et les futures versions (support JDK 10 ou 11 ?) corrigeront peut-être cette restriction.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  19. #19
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Merci pour tout ce travail.

    Mais je vais resté en Java 8 + JavaFX Mobile Plugin 1.3.x pour l'instant.

    Cela fonctionne parfaitement en Desktop et Android.

    En attendant Java 11 LTS et NetBeans 9 final.

    Je verrais à ce moment là.

    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de rendu unity sur mobile avec remote4
    Par honosstoa dans le forum Unity
    Réponses: 3
    Dernier message: 25/10/2015, 15h47
  2. SIG sur mobile avec Android
    Par developpCathy dans le forum Android
    Réponses: 8
    Dernier message: 16/01/2012, 15h03
  3. SIG sur mobile avec Android
    Par developpCathy dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/01/2012, 18h24
  4. [XML] SIG sur mobile avec Android
    Par developpCathy dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 31/12/2011, 16h42
  5. 3D sur mobile avec j2me
    Par chabfive dans le forum API graphiques
    Réponses: 1
    Dernier message: 10/11/2006, 09h28

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