while schleife starten , beeneden und wieder Starten

Tonimakkaroni

Aktives Mitglied
Hallo ich möchte meine while schleife . Starten, beenden und danach wieder starten und beenden usw. können . Die Schleife startet auch und ich kann sie auch anhalten . nur nochmal starten geht nicht .


Code:
final    Thread t = new Thread( new Runnable() {
boolean run = true;
                                                                   
                                                                                                         
                                                                     
public void run()
{
while (run )
  {
                                                                             
try {
                                                                               
                                                                        
                                                                        
PrintWriter outputt = new PrintWriter(chosenPort.getOutputStream());               
                                                                   
outputt.print("1\r");           
                                                                               
                                                                   
                                                                   
                                                                   
outputt.flush();
                                                                   
                                                                    
                                                                    
outputt.print("2\r");           
                                                                       
                                                                       
                                                                       
outputt.flush();
                                                                       
                                                                        
                                                                   
                                                                   
                                                                       
btnDauertestReset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
                                                                       
                                                                       
run = false;
                                                                       
                }
            });
                                                                       
                                                                                          
                                                                  
        }
                                                                       
                                                                     
       }
    });
                                                                    
                                                                    btnDauertestStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
                                                                       
   
t.start();
                                                                       
 
            }
        });
 
Wenn dein Programm nach beenden der Schleife auch beendet wird, ist es nicht möglich die Schleife erneut zu starten. Das heißt du brauchst eine Möglichkeit das dein Programm sich nicht beendet wenn du deine Schleife beendest (klingt logisch denk ich).

Hab hier nochmal deinen Code richtig formatiert, damit dir schneller geholfen werden kann.
Kann es sein das du eine Klammer vergessen hast?
Java:
final Thread t = new Thread( new Runnable() {
boolean run = true;
                                                                                                                               
public void run() {
    while (run ) {
        try {
            PrintWriter outputt = new PrintWriter(chosenPort.getOutputStream());              
            outputt.print("1\r");          
            outputt.flush();
            outputt.print("2\r");
            outputt.flush();
           
            btnDauertestReset.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    run = false;                                                  
                }
            });                                                        
        }
    }
});
                                                                   
btnDauertestStart.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        t.start();
    }
});
 
Die ActionListener haben in einem Thread nichts verloren. Überhaupt ist das Konzept so nichts.

Erstelle Deine UI und dort wo du sie erstellst erstellst du auch die ActionListener. Wird dann der StartButton angeklickt, erstellst du den Thread mit der while Schleife. Dem thread verpasst du dann eine Stoppfunktion welche du vom ActionListener aus aufrufst.

Gruß

Claus
 
Du kannst einen Thread nur einmal starten.
Das Runnable kannst du nur einmal erzeugen, aber du musst bei jedem Neustart einen neuen Thread erzeugen.
 
Du kannst einen Thread nur einmal starten.
Das Runnable kannst du nur einmal erzeugen, aber du musst bei jedem Neustart einen neuen Thread erzeugen.

Oder umformuliert: Runnable kann wiederverwendet werden (in Thread), aber Threads hingegen nicht. Ich hoffe, ich hab euch richtig verstanden. 😡 😳 🙄

Und ActionListener nur einmal registrieren....
 
So geht es jetzt :

Java:
btnStart.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent arg0) {
     final Thread t = new Thread(new Runnable() {
       boolean run = true;
       public void run() {
         while (run) {
           try {
             TimeUnit.MILLISECONDS.sleep(10000);
           } catch (InterruptedException e) {
             e.printStackTrace();
           }
           System.out.println("2");

           try {
             TimeUnit.MILLISECONDS.sleep(2000);
           } catch (InterruptedException e) {
             e.printStackTrace();
           }
           System.out.println("1");
         }
       }
     });

     btnStop.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent arg0) {
         t.stop();
       }
     });  

     t.start();
   }
});
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben