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 :

[Langage] Passer des évenements venant de classe java vers une appli javafx


Sujet :

JavaFX

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut [Langage] Passer des évenements venant de classe java vers une appli javafx
    Bonjour à tous,

    Je souhaite développer une application javafx qui réagit à des commandes vocales. j'ai déjà réalisé un code fonctionnel pour la partie reconnaissance vocale se basant sur CMU Sphinx.
    Au lancement de mon main.java, le moteur de reconnaissance vocale est lancé (classe VoiceSphinx) dans un thread et lorsqu'une nouvelle commande est détectée, la classe VoiceSphinx qui implémente une interface ObservableVoice informe le main à travers l'implémentation d'une interface ObservateurVoice
    (design pattern observateur)

    Je souhaiterais maintenant pouvoir "faire passer" ce mot à une application javafx pour qu'elle l'affiche. Je peux implémenter l'interface ObservateurVoice dans la classe JavaFx mais comment puis-je faire pour "abonner" ma classe JavaFx, ou autrement dit comment l'instancier depuis le code Java ou récupérer une référence vers elle pour l'ajouter à la liste des observateurs ?

    Extrait de code pour illustrer mon propos. Merci d'avance

    Main.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
     
    public class Main{
     
        private ObservateurVoice obsVoice1 ;
        private ObservateurVoice obsVoice2 ;
        private VoiceSphinx vs;
     
        public Main() {
            vs = new VoiceSphinx();
            obsVoice1 = new ObservateurVoiceImpl();
            vs.addObservateur(obsVoice1);
    // Mon problème est là, comment pour ajouter la classe javafx comme observateur
    //obsVoice2 = new ????(classe javaFx)
    //vs.addObservateur(obsVoice2);
            Thread t = new Thread(vs);
            t.start();
        }
     
        public static void main(String args[]) {
            new Main();       
        }
    }
    ObservateurVoice.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface ObservateurVoice {
     
        public void update(ResultVoice res);
    }
    ObservateurVoiceImpl.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class ObservateurVoiceImpl implements ObservateurVoice{
     
        public void update(ResultVoice res) {
           //TODO code qui réagit quand le main recoit une commande vocale
           System.out.println("Nouveau mot reçu : "+res.getCommandeComprise());
     
        }
    }
    VoiceSphinx.java
    Code classique des méthodes du pattern Observer

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Tu demarres ton programme JavaFX depuis une classe Java plutot que d'un script JavaFX ? Ou alors ton application est en Java ?
    Il n'est guere aise d'utiliser du JavaFX dans du Java, une piste est de peut-etre passer par la reflection : http://www.developpez.net/forums/d65...x/#post4085370 (mais cette exemple ne couvre que la reflection JavaFX dans JavaFX meme, pas la reflection JavaFX dans Java). Sinon tu peux egalement aller voir du cote du Scripting Engine : http://www.developpez.net/forums/d65...x/#post4056819 et d'utiliser le binding pour transmettre des objets dans le script : http://www.developpez.net/forums/d73...x-classe-java/

    Sinon quand a la question, il est tout a fait possible de definir l'implementation de l'observateur en JavaFX : http://www.developpez.net/forums/d65...x/#post4053074
    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é
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Par défaut
    Merci pour la réponse.

    Mon application initiale était en Java et il me fallait donc démarrer le JavaFx depuis Java.

    J'ai trouvé une solution en lançant un bout de script javafx qui instancie les objets JavaFx dont j'avais besoin dans mon programme Java et lancait ce dernier en passant les références des objets FX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var a = new ObjetFxSurLequelLeProgrammeJavaABesoinDuneReference();
    MainJava b = new MainJava() // je lance le programme Java
    b.initialiseFX(a);
    A partir de là, comme ObjetFxSurLequelLeProgrammeJavaABesoinDuneReference impélmente une interface Java, je peux accéder directement à ses méthodes.

    Cependant cette solution m'oblige à instancier tout mes objets FX au démarrage de mon programme Java ce que je ne veut pas faire.

    Au vue des complications que ce genre de conception risque d'apporter, j'ai revu l'ensemble et l'application va maintenant être une application JavaFx qui utilisera les classes Java comme librairie.

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

Discussions similaires

  1. Passer des argument avec le manifeste java
    Par hotward dans le forum Général Java
    Réponses: 3
    Dernier message: 09/09/2009, 06h23
  2. Plan étape des classes java vers BDD
    Par Sokhar dans le forum Hibernate
    Réponses: 2
    Dernier message: 30/05/2008, 12h29
  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. passer des arguments depuis un lien hypertxte vers une page php
    Par killer_instinct dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2007, 12h18
  5. Passer des commandes à un vbscript avec Java
    Par Voyvode dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2007, 23h00

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