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

Java Discussion :

Encapsuler un programme C++ dans un programme Java : une hérésie ?


Sujet :

Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 16
    Points
    16
    Par défaut Encapsuler un programme C++ dans un programme Java : une hérésie ?
    Bien chers tous,

    Nous voulons écrire un programme en langage Java qui
    1) génère une interface contenant un navigateur OpenSource écrit en langage C++ 11 : Chromium ;
    2) communique avec ce navigateur.

    Est-ce que c'est possible ?

    Nous vous posons cette question car nous souhaitons développer ce programme
    - sans concevoir un navigateur ( nous n'en avons ni le temps, ni la capacité. En outre, Chromium est parfait ) ;
    - en utilisant le langage Java ( et non pas le langage C++ ).

    Merci.

    Meilleures salutations,

    Naomi et Sophie

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Si je comprends bien votre besoin : vous souhaitez créer une UI en Java exploitant toutes les fonctionnalités du projet Chromium.

    Avoir un programme Java qui fait tourner un binaire spécifique à la plateforme (développé en C/C++/Ada etc) n'est pas une "hérésie" vu que Java propose JNI / JNA pour réaliser ce besoin si nécessaire. Par contre est-ce nécessaire d'en arriver ? En faisant une petite recherche je suis tombé sur le projet Selenium qui pourrait correspondre à votre besoin :

    Par contre je ne connais pas le niveau de compatibilité entre Chrome et Chromium.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Bonsoir Gugelhup,

    Nous nous sommes très mal exprimées.

    Nous souhaitions réaliser une interface utilisateur écrite en langage Java dont
    - l'une des fenêtres contient un navigateur web écrit en C++ : Chromium ;
    - l'autre fenêtre contient l'URL des ressources auxquelles le navigateur web est connecté ainsi que les résultats d'une recherche réalisée dans la page affichée par le navigateur web ( ces résultats seront des mots clés ) grâce à une des fonctions de cette deuxième fenêtre, activée par l'utilisateur à l'instant t.

    Nous avions deux solutions :
    - soit encapsuler le navigateur Chromium dans une interface utilisateur écrite en Java ;
    - soit écrire une extension en JavaScript destinée au navigateur Chromium.

    Commentaire sur la première solution : nous ignorons s'il est possible d'encapsuler un navigateur écrit en C++ dans une interface utilisateur écrite en Java puis d'échanger des données entre les deux programmes.

    Commentaire sur la seconde solution : nous ignorons s'il est possible d'écrire une extension en JavaScript qui va lire la valeur d'une variable d'un programme ( Chromium ) écrit en langage C++.

    Commentaire sur votre solution : nous ignorons si le projet Selenium permet de réaliser la première solution car nous n'avons pas compris à quoi sert Selenium.

    Il nous semble que la seconde solution est la plus simple mais nous avons un doute sur sa faisabilité.

    Si vous avez des idées ou un commentaire, nous écouterons attentivement vos conseils.

    Merci.

    Très respectueusement,

    Naomi et Sophie

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est obligé d'embarquer "Chromium" (par CEF je suppose) ? Un composant JavaFX WebView ça ne suffirait pas ? Sinon, un tel composant (Chromium embarqué) existe déjà mais en SWT (javacef).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Salut Joel,

    Selon vous, nous pouvons embarquer Chromium

    1) grâce à CEF

    Cette solution nous intéresse s'il est techniquement possible d'utiliser le framework CEF [ qui, comme vous le savez, n'est pas écrit en langage Java ], grâce à un programme Java, pour
    - enregistrer l'URL des ressources auxquelles est connecté à l'instant t le navigateur web embarqué dans une application Java utilisée par monsieur X ;
    - enregistrer le texte de ces ressources.

    Est-ce possible ?

    2) grâce à SWT

    Cette solution nous intéresse s'il est techniquement possible d'interroger SWT [
    une bibliothèque graphique libre pour Java, initiée par ... IBM ], grâce à un programme Java, pour
    - enregistrer l'URL des ressources auxquelles est connecté à l'instant t le navigateur web embarqué dans une application Java utilisée par monsieur X ;
    - enregistrer le texte de ces ressources.

    Est-ce possible ?


    Vous évoquez une troisième solution :
    - utiliser l'outil de création d'interface graphique officiel de Java 8 : JavaFX 2 ;
    - utiliser WebView : un node qui manage un moteur de recherche et affiche les résultats des recherches réalisées grâce à ce moteur.

    Cette solution est la plus simple, effectivement, s'il est techniquement possible d'enregistrer
    - l'URL du contenu affiché à l'instant t grâce au moteur de recherche qui est embarqué dans une application Java utilisée par monsieur X ;
    - le texte de ce contenu.

    Est-ce possible ?


    Merci beaucoup Joel pour votre contribution car, si votre réponse à notre troisième question est "oui", alors vous avez résolu simplement un problème que nous ne parvenions pas à résoudre depuis plusieurs mois.



    Conséquence : voici un message qui s'adresse aux auteurs et aux éditeurs de livres / vidéos / d'applications : il manque dans les formations en développement informatique, les librairies, les bibliothèques, un cours / un livre / une vidéo / une application qui explique simplement aux débutant(e)s en développement informatique toutes les choses concrètes qu'un langage informatique donné [ C, C++, Java, Swift, Python, Ruby, JavaScript,... ] permet de faire pour leur donner la capacité de savoir quel langage informatique elles / ils doivent étudier pour pouvoir écrire un programme qui répondra au cahier des charges de l'application qu'elles / ils rêvent de développer.


    Très respectueusement,

    Naomi et Sophie

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    CEF(Chromium Embedded Framework) est justement une bibliothèque faite pour embarqué un navigateur chromium dans une application de langage quelconque. Aussi faut-il utiliser une bibliothèque d'interfaçage avec CEF pour le langage en question (ce qu'est javacef pour java). Je ne peux pas dire le niveau de développement de javacef (jamais utilisé). Il s'agit d'interfacer le navigateur dans une application Java : ce qui permet de manipuler toutes ses fonctionnalités (et donc pas seulement des notions d'affichage de site web et de récupération de contenu, mais aussi toutes les autres : manipuler ses préférences, ses plugins, ses onglets, etc. Pour moi, c'est overkill si c'est juste encapsuler un site web et faire des manipulations (changer les pages, intercepter la navigation de l'utilisateur, enregistrer des contenus), mais au moins, on sait qu'on peut le faire, et tout est fourni.

    SWT est bibliothèque de gestion d'environnement graphique, comme Swing, ou JavaFX. SWT a un composant, Browser, qui permet d'encapsuler un navigateur web dans son application Java. On peut s'interfacer avec les sites affichés et la navigation de l'utilisateur dans une certaine mesure. Pour certains choses, on pourra s'appuyer sur des bibliothèques supplémentaires (traitement du html ou du javascript par exemple).
    L'avantage c'est que le navigateur n'est pas imposé (ou pas complètement) : ce qui permet de fonctionner avec le navigateur habituel que l'utilisateur utilise sur sa machine (safari sur MaxOSX, ie ou firefox sur Windows). Il existe un projet annexe pour utiliser chromium sous SWT (qui utilise d'ailleurs CEF).
    L'inconvénient de cet avantage c'est que l'interface avec le navigateur est générique : si on veut faire des manipulations spécifiques au fonctionnement du navigateur lui-même, on ne pourra pas. On ne manipule que des concepts de page web, de html, de javascript. Ce qui est suffisant la plupart du temps quand on veut pouvoir intégrer un site web dans une application Java.
    Autre avantage/inconvénient : SWT est une bibliothèque dont l'orientation principale est d'être au maximum intégrée à l'OS. L'avantage, c'est que l'utilisateur n'aura pas l'impression d'avoir une application Java comme avec Swing, mais aura l'impression d'avoir une application Windows, ou Macintosh, selon l'OS. Mais ceci impose une grosse partie native, ce qui complique la diffusion du programme : il faut avoir une version windows et une version macintosh, ou faire du chargement dynamique au démarrage en détectant l'OS. Ce n'est pas très compliqué à gérer mais il faut le faire.
    Tu peux voir rapidement les possibilité d'intégration en regardant la démo de DJ Native, une bibliothèque qui intègre le Browser SWT dans l'environnement Swing.

    WebView est un composant JavaFX, un autre environnement graphique, standard Java (sans bibliothèques supplémentaires au JDK), ne dépendant pas de l'OS. On aura un peu près les mêmes possibilité qu'avec le Browser de SWT.

    Dans le cas de CEF, on intègre une application avec ses fonctionnalités, et dans les autres cas, on manipule du html, du javascript, et des évenements du type "l'utilisateur clique sur un lien", "la page est chargée", "tel texte apparait dans la page", etc...
    Pour ma part, j'ai utilisé que le Browser SWT : remplacement dynamique de styles ou de parties de html, exécution de code Java dans la page html affichée (par callback), récupération de contenu pour traitement en Java. Mais, j'ai été confronté à certaines limites : par exemple, pour imprimer le contenu de la page, je n'avais que la possibilité d'invoquer en javascript l'impression du navigateur, donc un contrôle très limité des entêtes et de la pagination (celle du navigateur, pas la mienne), et pour sélectionner les parties à imprimer, il m'a fallut faire des manipulations de style fastidieuses. Je ne connais pas l'étendue des possibilités de CEF, mais je pense que j'aurais eu beaucoup plus de contrôle, mais j'aurais probablement passer beaucoup plus de temps à faire l'intégration complète (et mes clients qui utilisent FireFox exclusivement n'auraient pas été contents en plus).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup Joel pour vos explications. Elles sont très claires.

    Nous choisissons la solution qui nous semble la plus simple : l'environnement graphique Java FX 2.

    Très respectueusement

    Naomi et Sophie

  8. #8
    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
    Dans la mesure du possible, visez plutôt JavaFX 8 (dispo dans JDK8 donc) car plus aucun correctif de bug ne sera apporté à JavaFX 2.x (JDK7). La prochaine maj de JavaFX 8 contenant des correctifs sera avec le JDK8_65. Ensuite, la maj majeure suivante sera peut-être JavaFX 9 avec le JDK9 (les tickets sur le JDK Bug System semblent aller en ce sens).

    Par contre, faites des tests sur le niveau de compatibilité et de fonctionnalités que vous désirez atteindre. Vous aurez peut-etre le même genre de limitations qu'avec le Browser de SWT.
    Si besoin, un cours sur la communication entre Java et JavaScript par WebView et WebEngine est dispo chez Oracle : https://blogs.oracle.com/javafx/entr...ipt_and_javafx
    Pour ma part je n'ai eut aucun soucis pour utiliser des framework JS tant empaquetés en local que dispo en remote (Angular, Leaflet, Google Maps, Google Chart, etc).
    Et avant que la question ne soit posée, WebView ne supporte pas les plugins externes.

    Sinon, pour ce qui est de l’intégration de Chromium dans Swing ou JavaFX, on peut trouver ce projet semble-t-il : jxbrowser
    Je ne l'ai jamais utilisé donc je ne sais pas ce que ça vaut.
    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

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Bonsoir Bouye,

    Merci beaucoup pour vos précieuses informations.

    Très cordialement.

    Naomi et Sophie

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2011, 15h18
  2. execution d'un programme c++ dans du code java
    Par nina2007 dans le forum Général Java
    Réponses: 15
    Dernier message: 01/07/2009, 15h57
  3. Réponses: 3
    Dernier message: 17/09/2008, 14h02
  4. Réponses: 3
    Dernier message: 17/05/2007, 16h19
  5. Réponses: 13
    Dernier message: 10/07/2006, 16h47

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