Lancer un programme externe en cliquand sur un bouton
Voila donc j'ai un bouton dans mon code principal de ma fenetre :
Code:
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
| public class GestionSQLFenetre extends JFrame{
private JLabel label,label2,label3,numeroEtudiantLabel,nomLabel,prenomLabel,numVoieLabel,voieLabel,villeLabel,codePostalLabel;
private JComboBox liste,liste2;
private JPanel panel;
private JButton bouton1,bouton2,bouton3;
private JTextField numeroEtudiantField,nomField,prenomField,numVoieField,voieField,villeField,codePostalField;
public GestionSQLFenetre() {
super();
build();
}
private void build(){
setTitle("Gestion de la base de donnée"); //On donne un titre à l'application
setSize(470,400); //On donne une taille à notre fenêtre
setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
setResizable(false); //On interdit la redimensionnement de la fenêtre
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
setContentPane(buildContentPane());
}
private JPanel buildContentPane(){
//....
bouton3 = new JButton(new ExecutionRequete(this, "Executer"));
panel.add(bouton3); //On ajoute le bouton au panel
bouton3.setVisible(false);
//..... |
Donc ce bouton comme ces paramètre le montre il lance le programme ExecutionRequete que voici :
Code:
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
| import java.awt.event.ActionEvent;
import java.awt.*;
import javax.swing.*;
public class ExecutionRequete extends AbstractAction {
private GestionSQLFenetre fenetre;
private CreationEtudiant createEtudiant;
public ExecutionRequete(GestionSQLFenetre fenetre, String texte) {
super(texte);
this.fenetre = fenetre;
}
public ExecutionRequete(CreationEtudiant createEtudiant, String texte){
super(texte);
this.createEtudiant = createEtudiant;
}
public void actionPerformed(ActionEvent e) {
//Action lors du clic sur le bouton1
String gestion = fenetre.getModelGestion().getSelectedGestion();
String gestion2 = fenetre.getModelGestion2().getSelectedGestion2();
if (("Ajouter".equals(gestion2))&&("Gestion Etudiant".equals(gestion))){
createEtudiant.CreationEtudiant();
}
}
} |
Si la conditions est juste ( elle fonctionne tester avec boite de dialogue ) cela me lance la class CreationEtudiant(); donc qui se trouve dans le programme CreationEtudiant que voici
Code:
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
| public class CreationEtudiant {
private GestionSQLFenetre fenetre;
private CreationEtudiant createEtudiant;
public void CreationEtudiant(){
try{
// Dec des variable
String numeroEtudiant,nom,prenom,numVoie,voie,ville,requete,idville,codePostal;
Statement stmt=null;
ResultSet rs;
numeroEtudiant = fenetre.getNumeroEtudiantField().getText();
nom = fenetre.getNomField().getText();
prenom = fenetre.getPrenomField().getText();
numVoie = fenetre.getNumVoieField().getText();
voie = fenetre.getVoieField().getText();
ville = fenetre.getVilleField().getText();
codePostal = fenetre.getCodePostalField().getText();
//connexion
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost/java";
// Pour les étudiants : String url="jdbc:mysql://src-mysql/<nom de votre base de données";
System.out.println("Connexion a la base de donnees");
Connection con = DriverManager.getConnection(url,"root", ""); // Pour les étudiants SRC utiliser utilisateur et mot de passe de connexion à la base de données
System.out.println("Connecte");
stmt = con.createStatement();
//Verification de l'existence de la ville dans la base de donnée
requete = "SELECT idville FROM ville WHERE ville='"+ville+"';";
rs = stmt.executeQuery(requete);
if (rs.next()){
idville = rs.getString ("idville");
} else {
idville = "";
}
if ( idville == "" ) {
// La ville n'existe pas
// Insertion de la ville dans la table Ville
requete = "INSERT INTO ville VALUES (NULL,'"+ville+"','"+codePostal+"');";
stmt.executeUpdate(requete);
System.out.println(requete);
// Insertion de la ville dans la table Adresse
requete = "INSERT INTO adresse VALUES (NULL,'"+voie+"','"+numVoie+"',(SELECT idville FROM ville WHERE ville='"+ville+"'));";
stmt.executeUpdate(requete);
System.out.println(requete);
} else {
// La ville Existe
// Ajout d'une adresse dans la Table adresse avec l'idville existant
requete = "INSERT INTO adresse VALUES (NULL,'"+voie+"','"+numVoie+"',(SELECT idville FROM ville WHERE ville='"+ville+"'));";
stmt.executeUpdate(requete);
System.out.println(requete);
}
//Requete d'insertion dans la table Etudiants
requete="INSERT INTO etudiants VALUES ('"+numeroEtudiant+"','"+nom+"','"+prenom+"',(SELECT idadresse FROM adresse WHERE voie = '"+voie+"' AND numVoie = '"+numVoie+"'));";
stmt.executeUpdate(requete);
System.out.println(requete);
//deconnexion
con.close();
System.out.println("Deconnecté");
fenetre.getLabel3().setText("La requete d'insertion d'un étudiant a été effectué avec succès");
}catch (Exception e){
e.printStackTrace();
}
}
} |
Mais a ce niveau la dans la console il me sort :
Code:
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
| --------------------Configuration: <Default>--------------------
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ExecutionRequete.actionPerformed(ExecutionRequete.java:29)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5501)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5266)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3968)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) |
Donc pour récapituler :
GestionSQLFenetre -> Appuie sur le bouton -> ExecutionRequete -> CreationEtudiant mais a ce dernier niveau cela ne fonctionne donc pas.
Le seul moyen que j'ai trouver de faire fonctionner mon code CreationEtudiant et de mettre directement la class dans GestionSQLFentre
et donc de l'appeller depuis ExecutionRequete comme ceci :
Code:
1 2 3 4 5 6 7 8
|
//........
private GestionSQLFenetre fenetre;
//..........
fenetre.CreationEtudiant(); |
Et la cela fonctionne mais ayant une 50aine de code de la même taille cela serai le bordel de toute mettre direct dedans.