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);
    }