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

avec Java Discussion :

Displaymessage et systray


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut Displaymessage et systray
    Bonjour,
    J"utilise ce code issu de différents topic du forum pour analyser un fichier texte puis afficher un msg dans un Systray
    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    public class vue extends javax.swing.JFrame {
     private TrayIcon tray;
     private FolderSpyWorker folderSpyWorker=new FolderSpyWorker("d://Games//");
     Thread folderSpyThread = new Thread(folderSpyWorker);
     
        public vue() throws AWTException {
          initComponents();
          test();
        }
    void test(){
          try {
     
                folderSpyThread.start();         
     
                folderSpyThread.interrupt();  
     
            } catch (Exception ex) {
                Logger.getLogger(vue.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
      private void formWindowIconified(java.awt.event.WindowEvent evt) {                                     
                    setExtendedState(Frame.ICONIFIED);
    		setVisible(false);
    		System.out.println("fentre en icone");
    		iconTray();        // TODO add your handling code here:
        }                                    
     
        private void formWindowDeiconified(java.awt.event.WindowEvent evt) {                                       
                    setExtendedState(Frame.NORMAL);
                    SystemTray.getSystemTray().remove(tray);
    		System.out.println("icone en fenetre");        // TODO add your handling code here:
        }                                      
    public void Actipeche(String chemino) throws IOException{
             String TextAis = "";
             String fichierContenu,erreur;
               int cpt = 0;
               erreur = "";
               fichierContenu = ouvrir(chemino);
               String textecrire;
               int i = 0;
               Pecheur pecheposit =new Pecheur();
               ConvertionPosit convertposit = new ConvertionPosit();
            try {
                BufferedReader in4 = new BufferedReader(new StringReader(fichierContenu));
                String s = null;
                while((s = in4.readLine()) != null ){
                   Pattern pattern = Pattern.compile(
    			"(\\d+)" +	// des chiffres (groupe 1)
    			"/" +		// un slash
    			"(\\d+" +	// des chiffres (groupe 2)
    			"[A-Z])-" +	// Une lettre majuscule suivi d'un tiret
    			"(\\d+" +	// des chiffres (groupe 3)
    			"[A-Z])");	// Une lettre majuscule
     
    	Matcher m = pattern.matcher(s);
    	if (m.matches()) {
                String t = String.valueOf(i); 
                int a = Integer.parseInt(m.group(1) + t);
               textecrire = pecheposit.posEncodemsg4(convertposit.renvoilatdegmin(m.group(2)), convertposit.renvoilongdegmin(m.group(3)), a);
               envoiReseau(textecrire, 6020);
                     i++;
    	} else {
    		String t = s.split("/")[0];
                       Pattern MY_PATTERN = Pattern.compile("(\\d+){1,2}");
                        Matcher m3 = MY_PATTERN.matcher(t);
                        if (m3.matches()) {
                          erreur += s + "\n" ;   
                        }
     
    	}       
                }
                cpt = i;
               // 
               //if(TextAis!="") ecrire(Ch_Acti + "\\actipeche.txt", TextAis);
           }  catch (SixbitException ex) {
                Logger.getLogger(JTimAuto.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(JTimAuto.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ParseException ex) {
                Logger.getLogger(JTimAuto.class.getName()).log(Level.SEVERE, null, ex);
            } 
     
                System.out.println("ici");
                affichemsg(cpt);
     
        } 
    void affichemsg(int nb){
        tray.displayMessage("essai", "Vous avez créer" + nb + "  positions de pecheurs", TrayIcon.MessageType.INFO);
     
    }
    private void iconTray() {
    		if (SystemTray.isSupported()) {
    			System.out.println("SysTray supported");
    			// construction du menu et gestion des événements
    			PopupMenu popup = new PopupMenu();
    			MenuItem démarrer = new MenuItem("Afficher");
    			MenuItem quitter = new MenuItem("Quitter");
    			ActionListener afficher = new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					setVisible(true);
    					setExtendedState(Frame.NORMAL);
     
    				}
    			};
    			ActionListener arrêter = new ActionListener() {
    				public void actionPerformed(ActionEvent e) {
    					try {
    						tray.displayMessage("Arrêt de l'application Essai",
    								"A bientôt", TrayIcon.MessageType.INFO);
    						Thread.sleep(4000);
    					} catch (InterruptedException ex) {
    					} finally {
    						System.exit(0);
    					}
    				}
    			};
    			démarrer.addActionListener(afficher);
    			quitter.addActionListener(arrêter);
    			popup.add(démarrer);
    			popup.add(quitter);
    			// création de l'icône
    			Image icone = Toolkit.getDefaultToolkit().getImage(getClass().getResource("nuclearsubmarine.png"));// Si l'image est dans le jar //$NON-NLS-1$
    			tray = new TrayIcon(icone,"XXXXXX", popup);
    			System.out.println("Affichage de l'icone");
    			tray.setImageAutoSize(true);
    			tray.addActionListener(afficher);
    			// placement de l'icône dans la barre de tâche
    			try {
    				SystemTray.getSystemTray().add(tray);
    			} catch (AWTException ex) {
    			}
    		}
    	}
     void envoiReseau(String message,int Port) throws SocketException, UnknownHostException, IOException{
         int tutu = 1; 
         if(tutu == 1){
          BufferedReader inFromUser =
          new BufferedReader(new InputStreamReader(System.in));
          DatagramSocket clientSocket = new DatagramSocket();
          InetAddress IPAddress = InetAddress.getByName("127.0.0.1");
          byte[] sendData = new byte[1024];
          String sentence = message;
          sendData = sentence.getBytes();
          DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, Port);
          clientSocket.send(sendPacket);
          clientSocket.close();
          }
        }   
     String ouvrir(String chemi) throws IOException{
         RandomAccessFile raf = new RandomAccessFile(chemi, "r");
            String fichierC = "";       
                    try
                        {
     
     
                        String ligne;
                            while ( (ligne = raf.readLine()) != null )
                              {
                              fichierC += ligne + "\n";
                              }
     
                            }
                            catch (IOException e)
                              {
                              JOptionPane.showMessageDialog(this, "Aucun fichier spécifié!");
                              }finally{
                              raf.close();
                    }
     
           return fichierC;
        }
    Tout ce passe bien sauf pour "affichemsg" qui me crée
    déc. 27, 2013 2:35:47 PM jtimauto.FolderSpyWorker run
    SEVERE: null
    java.lang.NullPointerException
    at jtimauto.vue.affichemsg(vue.java:180)
    at jtimauto.vue.Actipeche(vue.java:176)
    at jtimauto.FolderSpyWorker.run(FolderSpyWorker.java:56)
    at java.lang.Thread.run(Thread.java:722)
    Voici la classe FolderSpyWorker
    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
    import java.io.IOException;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardWatchEventKinds;
    import java.nio.file.WatchEvent;
    import java.nio.file.WatchKey;
    import java.nio.file.WatchService;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /**
     * Surveiller les changements dans un dossier
     * @author Axel
     * @see http://www.fobec.com/java/1126/detecter-changements-fichiers-dans-dossier.html
     */
    public class FolderSpyWorker implements Runnable {
     
        private Path path = null;
     
        /**
         * Constructor
         * @param pathname String dossier à surveiller
         */
        public FolderSpyWorker(String pathname) {
            this.path = Paths.get(pathname);
            System.out.println("Start FolderSpy on:" + pathname);
        }
     
        /**
         * Worker
         */
        public void run() {
            WatchService watchService = null;
            try {
                watchService = this.path.getFileSystem().newWatchService();
                //Enregistrer les opérations à surveiller
                this.path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
                        StandardWatchEventKinds.ENTRY_MODIFY,
                        StandardWatchEventKinds.ENTRY_DELETE);
     
                WatchKey watchKey;
                // boucle sans fin
                while (!Thread.interrupted()) {
                    watchKey = watchService.take();
     
                    //traiter les evenements
                    for (WatchEvent<?> event : watchKey.pollEvents()) {
                        String fileName = event.context().toString();
                        if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
                            vue mavue = new vue();
                            mavue.Actipeche(path +"\\"+ fileName);
                        } else if (StandardWatchEventKinds.ENTRY_MODIFY.equals(event.kind())) {
                            System.out.println(fileName+" has been modified");
                        } else if (StandardWatchEventKinds.ENTRY_DELETE.equals(event.kind())) {
                            System.out.println(fileName+" has been deleted");
                        } else if (StandardWatchEventKinds.OVERFLOW.equals(event.kind())) {
                            System.out.println("Strange event");
                            continue;
                        }
                    }
                    //se place en attente de message
     
                    watchKey.reset();
                }
            } catch (InterruptedException ex) {
                try {
                    if (watchService!=null) watchService.close();
     
                    System.out.println("Stop FolderSpy");
                } catch (IOException ex1) {
                    Logger.getLogger(FolderSpyWorker.class.getName()).log(Level.SEVERE, null, ex1);
                }
            } catch (Exception ex) {
                Logger.getLogger(FolderSpyWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
        }  
    }
    Si quelqu'un peut m'aiguiller. Merci
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  2. #2
    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,

    Tu démarres ton Thread, sitôt ta classe de fenêtre créée, via la méthode test, et ce thread appelle (indirectement) affichemsg() pour écrire dans le systray, via la variable tray. Or cette variable n'est initialisée que dans la méthode icontray() qui est appelée uniquement par formWindowIconified(), qui n'est jamais appelée à première vue. Donc tray est null, donc NullPointerException lorsque tu invoques une méthode sur cette variable.

    Pourquoi ne pas appeler iconTray() dans initComponents() ?
    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.

  3. #3
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Merci effectivement ca marche mieux comme ca.
    Cordialement.
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  4. #4
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    j'avais mis résolu mais je viens de m'apercevoir qu'en faisant comme ca
    appeler iconTray() dans initComponents()
    quand ensuite je me servait de ma class FolderSpyWorke comme suis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
                            vue mavue = new vue();
                            mavue.Actipeche(path +"\\"+ fileName);
    je me retrouve avec autant de petit icones qu'il y a de fichiers créés!!!!
    J'ai bien compris que le problème viens de mais comment faire pour appeler une fonction dans ma class vue sans initialiser tout le reste.
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  5. #5
    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
    La solution, c'est d'initialiser ta variable tray une fois.

    Tu peux par exemple, faire une classe à part, que tu initialises une fois au début de ton programme, et dont tu passes la référence à ta classe de fenêtre.

    Ou alors un singleton, avec accès statique.

    Éventuellement, le plus simple, avec le moins de changement possible, c'est de rendre statique ta variable tray, et de faire au début de iconTray :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (SystemTray.isSupported() && tray==null) {
    Ou, encore, mieux, de rendre statique, en plus de la variable tray, la méthode iconTray et de l'appeler dans un bloc statique de la classe, tout simplement. Ce qui correspond, en fait, en quelque sorte, à la même solution que le singleton, mais mélangé dans la classe de fenêtre (ce serait donc plus clean de faire un singleton à part).

    Attention, par contre, à la gestion du message affiché par ta méthode affichemsg : il semble être propre à chaque instance de fenêtre Vue. Il te faudra probablement mettre à jour ce message à chaque fois qu'une fenêtre prend le focus pour rester cohérent. Mais tu verras bien ça lors de tes tests.
    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.

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

Discussions similaires

  1. Icone dans le systray
    Par SchpatziBreizh dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 12/07/2005, 15h17
  2. [MFC]Intercepter evenement sur icone systray
    Par 0xYg3n3 dans le forum MFC
    Réponses: 1
    Dernier message: 29/04/2005, 21h53
  3. [MFC] Appli en systray - MAJ du TIP ?
    Par Gothico dans le forum MFC
    Réponses: 2
    Dernier message: 19/11/2003, 22h48
  4. Uniquement dans le systray
    Par atmaniak dans le forum Composants VCL
    Réponses: 5
    Dernier message: 31/10/2003, 17h49
  5. [VB6] [Système] Icones du systray qui veulent pas partir
    Par Ctof dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/10/2002, 09h41

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