IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

Java desktop application - demarrer et stopper un thread en appuyant sur un bouton


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 64
    Points
    64
    Par défaut Java desktop application - demarrer et stopper un thread en appuyant sur un bouton
    Bonjour un tous,

    Je suis débutante en Java et j'utilise Netbeans 6.5.1. Merci d'avance pour votre aide et pour votre indulgence .

    J'ai créer une application java desktop, dans laquelle il y a un fichier (rpm_thread.java). Ce dernier contrôle la vitesse de rotation d'un moteur par le biais du port parallèle. Mon application principale est : moteurcontrolview.app, quand celle-ci est lancée mon moteur commence a tourner, seulement je voudrais pouvoir l'arrêter sans pour autant couper l'alimentation "physique" du moteur, mais je ne sais pas comment trop faire .

    En gros je voudrais avoir un bouton "start" qui démarre le thread et un bouton "stop" qui l'arrête.

    Pour l'instant, il y a un slider qui me permet de changer la vitesse de rotation du moteur mais pour arrêter sa rotation, il faut que je ferme la fenêtre de l'application.

    Voici mon fichier rpm_thread.java:
    --------------------------------------
    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
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    import java.lang.Math.*;
    import java.io.*;
    import jnpout32.ioDo;
    /**
     *
     * @author owned
     */
    public class ramp_thread implements Runnable {
     
        private static int RPM = 15;
        motorcontroller.MotorControllerView views;
        FileOutputStream fout;
     
     
        ioDo pPort = new ioDo();
     
        public ramp_thread(motorcontroller.MotorControllerView View1) {
            views = View1;
            pPort.LED1(true);
            pPort.send(returnVoltage(15));
     
            try {
     
                fout = new FileOutputStream("log.csv");
                new PrintStream(fout).println("TIME"+" , "+"RPM");
                new PrintStream(fout).println(MotorControllerView.now()+" , "+ RPM);
            } catch (FileNotFoundException ex) {
            }
     
     
        }
     
        public void run() {
     
     
            RPM = MotorControllerView.Final_RPM;
     
     
            int dRPM;
            int prevState = 0;
     
     
            while (true) {
                dRPM = MotorControllerView.Final_RPM;
                if (views.state == 1){                    
                    new PrintStream(fout).println(MotorControllerView.now()+" , "+ RPM);                             
                    pPort.LED2(true);    
                    pPort.send(returnVoltage(RPM));
     
                    }
                if(RPM == MotorControllerView.Final_RPM){                
                    views.state= 0;
                    pPort.LED2(false);
                }
                try {
                    if (dRPM > RPM) {
                        RPM++;
                        java.lang.Thread.sleep(60);
                    } else if(dRPM < RPM) {
                        RPM--;
                        java.lang.Thread.sleep(60);
                    }
     
                } catch (InterruptedException exception) {
                }
                views.getRPM();
     
     
            }
     
        }
     
        public static int returnFinalRPM() {
            return RPM;
        }
        private float returnVoltage(int _RPM){
            float voltage = (float)((((_RPM)-15)*(2.95)/(135))+(0.25));
     
            return voltage;
        }
     
     
    }
    ------------------------------------------------

    Le fichier moteurcontrolview.app (uniquement la partie qui contrôle le moteur)
    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
    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
     
     long Init_time = java.lang.System.currentTimeMillis();
        public static int Final_RPM = 15;
        public int state  = 0;
    private void spinnerSpeedStateChanged(javax.swing.event.ChangeEvent evt) {                                          
    // connect slider to spinner
        state=1;
        int RPMOut = (Integer)spinnerSpeed.getValue();
        Final_RPM = RPMOut;
        if((Integer)spinnerSpeed.getValue()>=150)spinnerSpeed.setValue(150);
        if((Integer)spinnerSpeed.getValue()<=15)spinnerSpeed.setValue(15);
        sliderSpeed.setValue((Integer) spinnerSpeed.getValue());    
     
    }                                         
     
    private void sliderSpeedStateChanged(javax.swing.event.ChangeEvent evt) {                                         
    // connect spinner to slider
        if (sliderSpeed.isFocusOwner())spinnerSpeed.setValue(sliderSpeed.getValue());
    }                                        
     
     
    private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
    }                                              
     
    private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
    }                                              
     
    public void getRPM(){
        feedbackText.setText(String.valueOf(ramp_thread.returnFinalRPM())+" RPM");
     
    }
    public static String now() {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("H:mm:ss:SSS");
        return sdf.format(cal.getTime());
     
      }
    // --------------------- FIN --------------------- //
        @Action
       public void showPportBox() {
            if (PportBox == null) {
                JFrame mainFrame = MotorControllerApp.getApplication().getMainFrame();
                PportBox = new SetParallelPort(mainFrame);
                PportBox.setLocationRelativeTo(mainFrame);
            }
            MotorControllerApp.getApplication().show(PportBox);
        }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    remplace, dans le run, ton

    par, par exemple
    et crée un champ booléen "stopped" que tu pourra passer à true sur l'appel d'une méthode à créer (par exemple requestStop()). T'aura plus qu'à appeler cette méthode depuis ton application et le thread s'arretera comme un grand. Pour redémarrer suffira de refaire un nouveau thread.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Merci Tchize pour votre réponse, voici ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private static boolean stopped = true;
     
    public static boolean requestStop() {
            stopped = false;
            return stopped;
        }
    et dans mon fichier moteurcontrolview.app:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void StopButtonActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        ramp_thread.requestStop();
    }
    Le problème c'est que la vitesse du moteur ne change plus, c'est toujours à la valeur 15 rpm.

    Merci encore pour votre aide.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    je connais pas ton moteur moi, a toi de lui envoyer les bonne commande pour en faire ce que tu veux quand tu arrete le thread

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Je me suis peut être mal exprimée mais en modifiant true par !stopped comme vous m'avez dit, le moteur reste toujours a la même vitesse alors qu'il fonctionnait avant, je n'ai rien toucher ailleurs dans le code.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    le code que je t'ai donné va te faire sortir du thread, mais c'est tout ce qu'il fera (c'est ta question de base). Maintenant si tu veux arreter ton moteur quand tu sort de ta boucle, ben tu regarde la doc ce que tu dois lui envoyer comme codes sur son port de controle.

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Je n'ai finalement pas changé le script du thread. Pour changer la vitesse du moteur, j'ai ajouté des boutons sur mon interface lesquels était associé à une valeur numérique du spinner, par exemple pour lui demander de tourner à 30 rpm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {                                               
    spinnerSpeed.setValue(30);
    }
    En ce qui concerne l'arrêt du moteur, le problème était finalement hardware, il fallait ajouter un relais qui permet d'arrêter le flux de données vers le port parallèle.

    Désolée pour la réponse tardive .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java Desktop Application est absente
    Par letelwad dans le forum NetBeans
    Réponses: 1
    Dernier message: 29/04/2013, 13h04
  2. Problème avec Java Desktop Application
    Par driteur dans le forum NetBeans
    Réponses: 1
    Dernier message: 25/10/2011, 08h56
  3. Java Desktop Application : utiliser plusieurs vues
    Par antow42 dans le forum NetBeans
    Réponses: 1
    Dernier message: 05/01/2010, 15h51
  4. java desktop application
    Par moka1 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 12/10/2009, 02h12
  5. Java Desktop Application & JPanel
    Par your@ dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 28/06/2009, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo