Lancer un programme externe avec ActionListener Java
Fermé
Lume_56
Messages postés
42
Date d'inscription
lundi 1 juin 2020
Statut
Membre
Dernière intervention
12 novembre 2024
-
Modifié le 30 mars 2022 à 21:22
Lume_56 Messages postés 42 Date d'inscription lundi 1 juin 2020 Statut Membre Dernière intervention 12 novembre 2024 - 17 avril 2022 à 09:51
Lume_56 Messages postés 42 Date d'inscription lundi 1 juin 2020 Statut Membre Dernière intervention 12 novembre 2024 - 17 avril 2022 à 09:51
A voir également:
- Lancer un programme externe avec ActionListener Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Chkdsk disque dur externe - Guide
- Lancer un programme au demarrage - Guide
- Java apk - Télécharger - Langages
3 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
3 avril 2022 à 19:11
3 avril 2022 à 19:11
Bonjour,
Sans préjuger de ce qu'est censé faire la commande cyberghostvpn et si elle est bien écrite, voici comment tu peux l'intégrer à ton programme :
Remarque : il y a des méthodes intéressantes dans la classe Process qui peuvent te permettre de le manipuler, je pense en particulier à getInputStream et getOutputStream pour récupérer ce qu'affiche le programme et lui envoyer des instructions.
Sans préjuger de ce qu'est censé faire la commande cyberghostvpn et si elle est bien écrite, voici comment tu peux l'intégrer à ton programme :
// Sous-menu run JMenuItem runItItem = new JMenuItem("Run"); runItItem.addActionListener(MenuVpn2::run); menuStopRun.add(runItItem); JMenuItem stopItItem = new JMenuItem("Stop"); runItItem.addActionListener(MenuVpn2::stop); menuStopRun.add(stopItItem); fen.setVisible(true); } private static Process process; private static void run(ActionEvent event) { if (process != null) return; try { process = Runtime.getRuntime().exec("sudo cyberghostvpn --traffic --country-code " + country + " --connect"); } catch (IOException e) { throw new UncheckedIOException(e); } } private static void stop(ActionEvent e) { if (process == null) return; process.destroy(); process = null; }
Remarque : il y a des méthodes intéressantes dans la classe Process qui peuvent te permettre de le manipuler, je pense en particulier à getInputStream et getOutputStream pour récupérer ce qu'affiche le programme et lui envoyer des instructions.
Lume_56
Messages postés
42
Date d'inscription
lundi 1 juin 2020
Statut
Membre
Dernière intervention
12 novembre 2024
1
3 avril 2022 à 19:44
3 avril 2022 à 19:44
Merci beaucoup ! Je fais l’essai et te tiens au courant.
Lume_56
Messages postés
42
Date d'inscription
lundi 1 juin 2020
Statut
Membre
Dernière intervention
12 novembre 2024
1
17 avril 2022 à 09:51
17 avril 2022 à 09:51
Bonjour,
J'ai pris du temps et j'ai fait d'autres essais. Le programme se lance bien, par contre, la commande stop n'est pas opérante. Apparemment,
Je te joins une version enrichie. Elle inclut le lancement du flux "streaming" qui se lance avec la commande
J'ai fait un essai mais, là encore, je n'ai pas réussi à l'ajouter.
J'ai également ajouté l'élément Connexion au menu, l'idée étant de connaître le point de connexion. Pour l'instant, je me contente d'un lanceur avec la commande
L'idéal (!) serait de pouvoir se connecter, soit en mode Trafic, soit en mode Streaming sans passer par la touche
On aurait ainsi un menu très léger avec Traffic - Streaming - Stop.
Voici le code actuel :
PS C'est juste pour te donner un retour. Je vais reprendre le projet en étudiant les méthodes de la classe Process que tu m'as conseillé de découvrir( getInputStream et getOutputStream) et que j'ai "zappées". Par ailleurs, j'ai été pas mal occupé et ce projet n’est qu'un passe-temps.
J'ai pris du temps et j'ai fait d'autres essais. Le programme se lance bien, par contre, la commande stop n'est pas opérante. Apparemment,
process.destroy();n'a pas d'effet. On peut arrêter la connexion en ligne de commande avec
sudo cyberghostvpn --stopque j'ai essayé d'intégrer au projet, sans succès.
Je te joins une version enrichie. Elle inclut le lancement du flux "streaming" qui se lance avec la commande
process = Runtime.getRuntime().exec("sudo cyberghostvpn --streaming --country-code " + country + " --connect");
J'ai fait un essai mais, là encore, je n'ai pas réussi à l'ajouter.
J'ai également ajouté l'élément Connexion au menu, l'idée étant de connaître le point de connexion. Pour l'instant, je me contente d'un lanceur avec la commande
mate-terminal -x bash -c "curl ifconfig.co/json; exec $SHELL", ce qui affiche les informations de connexion dans le terminal. C'est sûrement à modifier.
L'idéal (!) serait de pouvoir se connecter, soit en mode Trafic, soit en mode Streaming sans passer par la touche
run. On pourrait imaginer voir s'afficher les informations de connexion dans la fenêtre, ce qui supprimerait Connexion du menu.
On aurait ainsi un menu très léger avec Traffic - Streaming - Stop.
Voici le code actuel :
package menuvpn3;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.UncheckedIOException;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JFrame;
public class MenuVpn3 {
private static String country;
public static void main(String[] args) {
//création d'une fenêtre JFrame
JFrame fen = new JFrame("Choisir son VPN - MenuVpn3");
//création d'un panneau (JPanel)
JPanel panel = new JPanel();
panel.setLayout(null);
fen.setSize(500, 400);
fen.setContentPane(panel);
//création de la barre des menus
JMenuBar myMenuBar = new JMenuBar();
//Ajout de la barre de menus au JPanel
panel.add(myMenuBar);
//Positionnement de la barre des menus avec la méthode setBounds()
myMenuBar.setBounds(0, 0, 500, 40);
//Création du menu Fichier
JMenu menuTraffic = new JMenu("Traffic");
JMenu menuStreaming = new JMenu("Streaming");
JMenu menuStopRun = new JMenu("Run");
JMenu menuConnexion = new JMenu("Connexion");
//Ajout du menu à la barre des menus
myMenuBar.add(menuTraffic);
myMenuBar.add(menuStreaming);
myMenuBar.add(menuStopRun);
myMenuBar.add(menuConnexion);
//TRAFFIC
// Ajout de sous-menu Traffic FR
JMenuItem trafficFranceItem = new JMenuItem("France");
menuTraffic.add(trafficFranceItem);
trafficFranceItem.addActionListener((event) -> country = "FR");
// Ajout de sous-menu Traffic DE
JMenuItem trafficDEItem = new JMenuItem("Allemagne");
menuTraffic.add(trafficDEItem);
trafficDEItem.addActionListener((event) -> country = "DE");
// STREAMING
// Ajout de sous-menu Streaming IT
JMenuItem streamingItItem = new JMenuItem("Italie");
menuStreaming.add(streamingItItem);
streamingItItem.addActionListener((event) -> country = "IT");
// Ajout de sous-menu Streaming BE
JMenuItem streamingBeItem = new JMenuItem("Belgique");
menuStreaming.add(streamingBeItem);
streamingBeItem.addActionListener((event) -> country = "BE");
// Sous-menu run Run / Stop
JMenuItem runItItem = new JMenuItem("Run");
runItItem.addActionListener(MenuVpn3::run);
menuStopRun.add(runItItem);
JMenuItem stopItItem = new JMenuItem("Stop");
runItItem.addActionListener(MenuVpn3::stop);
menuStopRun.add(stopItItem);
// Sous-menu Connexion
JMenuItem connexionItem = new JMenuItem("Connecté");
connexionItem.addActionListener(MenuVpn3::connexion);
menuConnexion.add(connexionItem);
fen.setVisible(true);
}
private static Process process;
private static void run(ActionEvent event) {
System.out.println("Connexion en cours");
if (process != null) {
return;
}
try {
process = Runtime.getRuntime().exec("sudo cyberghostvpn --traffic --country-code " + country + " --connect");
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
private static void stop(ActionEvent e) {
if (process == null) {
return;
}
process.destroy();
process = null;
}
private static void connexion(ActionEvent event) {
System.out.println("Où suis-je connecté ? ");
if (process != null) {
return;
}
try {
process = Runtime.getRuntime().exec("mate-terminal -x bash -c \\\"curl ifconfig.co/json; exec $SHELL\\ ");
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
PS C'est juste pour te donner un retour. Je vais reprendre le projet en étudiant les méthodes de la classe Process que tu m'as conseillé de découvrir( getInputStream et getOutputStream) et que j'ai "zappées". Par ailleurs, j'ai été pas mal occupé et ce projet n’est qu'un passe-temps.