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 :oops:.
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 :calim2:.
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:
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:
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);
} |