Lancer un programme externe avec ActionListener Java
Lume_56
Messages postés
42
Date d'inscription
Statut
Membre
Dernière intervention
-
Lume_56 Messages postés 42 Date d'inscription Statut Membre Dernière intervention -
Lume_56 Messages postés 42 Date d'inscription Statut Membre Dernière intervention -
Bonsoir à tous,
J'ai commencé un programme pour choisir le lancement de VPN dans un menu. Par contre, je n'arrive pas à "lier" l'item au programme à lancer.
Je voudrais lancer le sous-menu "France" avec la commande "sudo cyberghostvpn --traffic --country-code FR --connect".
J'ai déclaré Runtime rt = Runtime.getRuntime(); et ensuite essayé rt.exec(country = "FR" "sudo cyberghostvpn --traffic --country-code FR --connect";), sans résultat.
Voici le code qui fonctionne car j'ai supprimé ce qui provoquait des erreurs. ( je coince également pour les classes RunActionListener et StopActionListener.)
Merci pour votre aide !
J'ai commencé un programme pour choisir le lancement de VPN dans un menu. Par contre, je n'arrive pas à "lier" l'item au programme à lancer.
Je voudrais lancer le sous-menu "France" avec la commande "sudo cyberghostvpn --traffic --country-code FR --connect".
J'ai déclaré Runtime rt = Runtime.getRuntime(); et ensuite essayé rt.exec(country = "FR" "sudo cyberghostvpn --traffic --country-code FR --connect";), sans résultat.
Voici le code qui fonctionne car j'ai supprimé ce qui provoquait des erreurs. ( je coince également pour les classes RunActionListener et StopActionListener.)
package menuvpn2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.io.IOException; import javax.swing.ImageIcon; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JFrame; public class MenuVpn2 { private static ActionListener menuItemListener; // (utilité pour ce script ?) private static String country = "FR"; public static void main(String[] args) { //création d'une fenêtre JFrame JFrame fen=new JFrame("Choisir son VPN"); //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 menuStopRun = new JMenu("Run"); //Ajout du menu à la barre des menus myMenuBar.add(menuTraffic); myMenuBar.add(menuStopRun); //create menu items (j'ignore le sens de ces lignes !!!) JMenuItem newMenuItem = new JMenuItem("New"); newMenuItem.setMnemonic(KeyEvent.VK_N); newMenuItem.setActionCommand("New"); // Ajout de sous-menu FR JMenuItem trafficFranceItem = new JMenuItem("France"); trafficFranceItem.addActionListener((event) -> country = "FR"); menuTraffic.add(trafficFranceItem); // Ajout de sous-menu DE JMenuItem trafficDEItem = new JMenuItem("Allemagne"); // trafficDEItem.addActionListener((event) -> country = "DE"); menuTraffic.add(trafficDEItem); //Sous-menu run JMenuItem runItItem = new JMenuItem("Run"); runItItem.addActionListener(new RunActionListener()); menuStopRun.add(runItItem); JMenuItem stopItItem = new JMenuItem("Stop"); runItItem.addActionListener(new StopActionListener()); menuStopRun.add(stopItItem); fen.setVisible(true); } private static class RunActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub // test values and launch } } private static class StopActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub // test values and launch } } }
Merci pour votre aide !
Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE |
A voir également:
- Lancer un programme externe avec ActionListener Java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Chkdsk disque dur externe - Guide
- Lancer un programme au démarrage windows 10 - Guide
- Eclipse java - Télécharger - Langages
3 réponses
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.
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.