Ecrire code ActionListener pour connexion VPN avec ComboBox
Lume_56 Messages postés 42 Date d'inscription Statut Membre Dernière intervention - 20 oct. 2023 à 13:56
- Code free wifi secure gratuit
- Code ascii - Guide
- Photofiltre 7 gratuit - Télécharger - Retouche d'image
- Clé windows 10 gratuit - Guide
- Open office gratuit - Télécharger - Suite bureautique
- Ccleaner gratuit - Télécharger - Nettoyage
4 réponses
Bonjour,
Sur la partie ComboBox, tu peux beaucoup simplifier :
private void initialize() { setSize(300, 300); setLocationRelativeTo(null); setLayout(new FlowLayout(FlowLayout.LEFT)); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); String[] names = {"", "USA", "Allemagne", "GB", "Italie", "Espagne"}; JComboBox<String> comboBox = new JComboBox<>(names); comboBox.addActionListener(event -> cyberghostvpn((String) comboBox.getSelectedItem())); add(comboBox); } private void cyberghostvpn(String country) { String command = "sudo cyberghostvpn --streaming --country-code " + country + " --connect"; System.out.println(command); // TODO }
Bonsoir,
Merci pour ton aide. La commande se lance correctement mais la connexion au serveur VPN ne se fait pas. J'ai alors pensé au nom des pays tels qu'ils sont enregistrés par Cyberghostvpn : =FR ! Après modification, tout se lance bien et la commande s'affiche dans le terminal. Par contre, aucune connexion. En mode direct via la console, la commande se connecte au VPN.
Dans mon message précédent je n'ai traité que la partie Combobox.
Aucune commande n'est lancée, on affiche juste ce que devrait être la commande.
Techniquement la commande pourra être lancée avec Runtime.exec() mais cela va ouvrir un nouveau processus avec des flux qu'il va falloir lire, c'est un travail un peu plus conséquent (voir code ci-dessous).
De plus, si tu fais plusieurs choix de pays avec ta Combobox, cela va lancer plusieurs commandes les unes derrières les autres, il faudrait s'assurer que les processus précédents soient bien arrêtés, c'est à dire qu'il faudra sûrement gérer une commande stop avant de faire une nouvelle commande connect.
En creusant un peu ton besoin, on voit bien que ton code va se complexifier, sans parler de la partie purement VPN qu'il faudra déboguer, car quand bien même tu exécuterait la bonne commande, ce n'est pas sûr que tu arrives à établir une connexion dès le premier coup.
Exemple de code pour exécuter des commandes, afficher les flux (out et err) et gérer les processus :
import java.io.*; public class Ping { public static void main(String[] args) throws Exception { Process p1 = exec("ping", "localhost"); p1.waitFor(); System.err.println("#P1 = " + p1.exitValue()); // #P1 = 0 => on a attendu la fin du processus (en succès) Process p2 = exec("ping", "toto"); p2.waitFor(); System.err.println("#P2 = " + p2.exitValue()); // #P2 = 1 => on a attendu la fin du processus (en erreur) Process p3 = exec("ping", "localhost"); Thread.sleep(100); p3.destroy(); System.err.println("#P3 = " + p3.exitValue()); // #P3 = 1 => on a interrompu le processus avant la fin } private static Process exec(String... command) throws Exception { Process process = Runtime.getRuntime().exec(command); echoAll(process.getInputStream(), System.out); echoAll(process.getErrorStream(), System.err); return process; } private static void echoAll(InputStream input, PrintStream printer) { Thread t = new Thread(() -> new BufferedReader(new InputStreamReader(input)).lines().forEach(printer::println)); t.setDaemon(true); t.start(); } }