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 :

[Débutant] Listener pour une entrée dans le presse papier.


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Débutant] Listener pour une entrée dans le presse papier.
    Je cherche s'il existe quelque chose dans les packages Java pour detecter une entrée dans le presse papier.

    Actuellement, j'ai un analyseur syntaxique qui traite le texte (si c'en est) présent dans le presse papier.

    Je voudrais executer mon programme sous forme d'un thread en arrière plan, le laisser tourner, et chaque fois que je selectionne un texte et que je le copie (lors du Ctrl-C), le programme s'éxécute et traite le texte, ce qui m'éviterait d'avoir à exécuter le programme à chaque fois.

    Je suis "grand" débutant.

    Si quelqu'un a une idée, merci de m'éclairer.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 848
    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 848
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Voir du cote de la classe Clipboard mais encore faut'il que tu connaisses le type de donnees (DataFlavor) qui t'interressent. En effet le presse-papier peut contenir une meme donnee sous plusieurs representations differentes en meme temps :

    - chaine de texte
    - image
    - ..........

    Sinon un petit prototype dont tu pourras t'inspirer :

    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
     
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
    // final because this list is used in a anonymous inner class.
    final List<DataFlavor> availableFlavorList = new LinkedList<DataFlavor>();
    // Main loop.
    while (true) {
      ////////////////////////////////////////////////////////////////////////////////////////////////
      // Look for available clipboard content based on the flavors were are expecting.
      // synchronized because this list is used in a anonymous inner class.
      synchronized (availableFlavorList) {
        availableFlavorList.clear();
        for (Flavor flavor : expectedFlavors) {
           if (clipbard.isDataFlavorAvailable(flavor)) {
             availableFlavorList.add(flavor);
           }
        }
      }
      //////////////////////////////////////////////////////////////
      // Clipboard has content, we fire an event in the EDT.
      if (availableFlavorList.size() > 0) {
         SwingUtilities.invokeLater(new Runnable() {
            /** @inheritDoc
            */
            public void run() {
             // synchronized because this list is used in the main loop.
              synchronized (availableFlavorList) {
                 // Fire event here.
                 // the clipboard has some content we're interrested in.
                 ...
               }
          });
      }
      ///////////////////////////
      // Sleep for some time.
      t.sleep(...);  
    }

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Corrige moi si je me trompe, mais l'idée c'est qu'un thread va constater le contenu du presse papier régulièrement, vérifie qu'il correspond a l'attente que j'en ai, si tel est le cas, il le traite, puis l'efface?

    Euh.. c'est pas ca, je viens de lire la doc..
    Merci bcp.. me reste plus qu'à comprendre comment utiliser les listeners :p

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 848
    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 848
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    En fait la je te proposais (je n'ai rien teste de concret cependant) une solution generale pour faire une API d'ecouteur du presse papier.
    Mais apres tu peux uniquement te restreindre a DataFlavor.stringFlavor et lancer l'analyse syntaxique plutot que de "firer" des evenements de notification a tout va.

    Mais ton application doit etre "fermee"/self-enclosed ou au contraire intercepter tout ce qui passe a travers le presse papier du systeme ?
    Dans le 1er cas mieux vaut peut-etre utiliser un Clipboard dedie que celui du systeme.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Non, j'ai besoin des informations qui transitent via le presse papier depuis la totalité du systeme.

    Je vois pas tellement l'utilité d'un presse papier interne de toutes facons..

    Et si je savais comment faire pour que java récupère directement des informations depuis une page internet, je n'aurais pas à passer par cà

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai un gros problème...
    J'ai créé le propre listener comme tu me l'as conseillé, et il marche, mais il est terriblement lent... mais alors, c'est une horreur.. il ralentit tout mon pc, et limite mon accès au reste des programmes...

    J'ai mis une vérification du presse papier toutes les 500 ms... je sais pas si c'est trop important, mais j'ai le sentiment qu'il me faut au moins ca...

    Une idée?

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 848
    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 848
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Strange... cela vient peut-etre effectivement de ton temps de sommeil qui est trop court mais 500ms devrait etre OK tu peux essayer cependant de passer a 700ms ou a 1s (fait quand meme des calculs de temps ecoule entre 2 boucles pour voir si c'est bon). A moins que l'acces au presse-papier du systeme soit super-lent et gourmand en ressources. Aussi essaie de voir si une fois l'evenement recut tu ne peux pas le traiter dans une thread separee ou plus tard dans l'EDT (voir SwingUtilities.invokeLayer).

    sinon une autre solution s'offre a toi : il s'agirai d'utiliser JNI pour appeler du code natif qui ferai lui-meme l'acces au presse-papier du systeme via les appels Windows.

Discussions similaires

  1. [AC-2010] Erreur de type pour une entrée dans une table
    Par touraine dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/12/2012, 13h40
  2. Mettre une image dans le presse papier
    Par cyrilleG dans le forum Tcl/Tk
    Réponses: 4
    Dernier message: 06/02/2008, 22h28
  3. Réponses: 3
    Dernier message: 06/07/2005, 11h27
  4. Réponses: 5
    Dernier message: 03/02/2004, 14h20
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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