Bonjour,

voici mon interrogation, j'ai développé une application de gestion de radio et de connexion à ces dernières grace a un getRuntime.exec qui lance vlc ( par exemple ) avec la radio choisie dans une JList.
J'ai donc placé un listener sur la list pour que lorsque l'utilisateur clic sur un item le processus se lance ( injection de l'url + lancement du lecteur multimedia ). Mais en placant un println en guise de test d'écoute, l'opération s'effectue 2 fois. Ce que je souhaite réparer, car doubler le processus est inutile.

Voici le code concerné :


Le listener de la JList:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
listeRadio.addListSelectionListener(new ListSelectionListener(){
 
			@Override
			public void valueChanged(ListSelectionEvent arg0) {
				// TODO Auto-generated method stub
			System.out.println("item choisi");	
 
 
			}
 
		});
Je souhaiterai que le listener accède directement à cette classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
	class PrintListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			int selected[] = booklist.getSelectedIndices();
			System.out.println("Selected Elements:  ");
 
			for (int i = 0; i < selected.length; i++) {
				BookEntry element = (BookEntry) booklist.getModel()
				.getElementAt(selected[i]);
				System.out.println("  " + element.label());
			}
		}
	}
Et pour terminer le processus, la methode de connexion, qui lit l'item choisi et le place en paramètre ( chaque item correspond a une url (logique) et est injecté grace au runtime.getRuntime.exec() ).


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
public void fonctionConnexion() {
		int selected[] = booklist.getSelectedIndices();
 
        for(i=0; i<selected.length; i++) {
		BookEntry element = (BookEntry) booklist.getModel().getElementAt(i);
		radio = element.label();
		System.out.println("élément choisi : "+radio);
}
 
		try
		{
			Process exec = Runtime.getRuntime().exec(new String[] {chemin, radio });
 
		}												
		catch (IOException aIOException)
		{
			JOptionPane.showMessageDialog(null, aIOException.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
		}
	}
}
Je pense qu'il est possible d'optimiser tout ça, mais c'est un projet d'étude alors il ne faut pas que cela soit trop parfait
Si vous avez besoin de plus d'informations, je reste à votre écoute.

Merci