Endlosschleife abbrechen

ocsme

Top Contributor
Hallo zusammen,

ich würde sehr gerne eine Endlosschleife in einem Thread über eine Taste abbrechen doch ich bekomme es leider nicht hin.
Habe zwei Klassen die sehen wie folgt aus:
Java:
public class Barrier extends Thread {

    private String name;
    private int open, close;

    Barrier(String name, int open, int close) {
        this.name = name;
        this.open = open;
        this.close = close;
    }

    int getOpen() {
        return open;
    }

    int getClose() {
        return close;
    }

    String getBarrier() {
        return name;
    }

    void setOpen(int open) {
        this.open = open;
    }

    void setClose(int close) {
        this.close = close;
    }

    void setBarrier(String name) {
        this.name = name;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                System.out.println("Barrier " + getBarrier() + ": Start Opening");
                sleep(80);
                System.out.println("Barrier " + getBarrier() + ": End Opening");
                sleep(getOpen());
                System.out.println("Barrier " + getBarrier() + ": Start Closing");
                sleep(60);
                System.out.println("Barrier " + getBarrier() + ": End Closing");
                sleep(getClose());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
    
}

Java:
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {   
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        System.out.println("Soll das Programm in Endlosschleife gestartet werden?");
        boolean endless = s.nextBoolean();
        if (!endless) {
            System.out.println("Bitte geben Sie die Anzahl der Ausfahren ein: ");
            try {
                int anz = s.nextInt();
                Barrier[] barriers = new Barrier[anz];
                for (int i = 0; i < anz; i++) {
                    System.out.println("Wartezeit (Ausfahrt" + (i + 1) + ") geoeffnet in s: ");
                    int open = s.nextInt();
                    System.out.println("Wartezeit (Ausfahrt" + (i + 1) + ")geschlossen in s: ");
                    int close = s.nextInt();
                    barriers[i] = new Barrier(Integer.toString(i + 1), open, close);
                }
                for (int i = 0; i < anz; i++) {
                    barriers[i].start();
                }
            } catch (Exception x) {
                x.printStackTrace();
            }
        }

        s.close();

    }

}

Nun dachte ich in der Main Klasse eine Innere Klasse zu machen die so aussieht:

Java:
class Breakk extends Thread {
      BufferedReader br;
      
      public Breakk() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
      
      public void run() {
         char c = 0;
         while(c != ' ') {
            try {
               c = (char)br.read();
            }
            catch(IOException e) {
               System.out.println("Fehler beim Lesen von der Tastatur!");
            }
         }
         System.exit(0);
      }
   }

Jetzt wollte ich sehr gerne wenn man in der Main sagt Endlosschleife das ich diese Klasse nutzen könnte doch das klappt so nicht :-(
Leider war ich mal wieder eine längere Zeit Krank und hab gerade das Gefühl man fängt wieder bei NULL an 🙁
 

ocsme

Top Contributor
und was soll das für eine condition sein?
Das soll doch mein Tastendruck sein oder stehe ich jetzt ganz auf dem Schlauch =D

so bricht man doch nur Sequenzielle Endlosschleifen ab wie du das oben geschrieben hast oder?
 

ocsme

Top Contributor
kann ich also einfach so etwas machen:
Java:
if(br.readLine().equals("break"))

Wenn dann break geschrieben wurde bricht es z. B. ab.
 

ocsme

Top Contributor
ahha okay glaube dann funktioniert mein Konstrukt so nur nicht!
Werde mal sehen ob ich das hin bekomme :)

Danke für die Hilfe :)
 

mihe7

Top Contributor
Wobei ich gerade sehe, dass Du ja in Deiner "Endlosschleife" sowieso die Eingabe abfragst, d. h. hier kannst Du das tatsächlich einfach in der Schleife abfragen:

Code:
while (true) {
    s := eingabe
    Falls "break" eingegeben wurde: break
    ...
}
 

ocsme

Top Contributor
So hab es hin bekommen doch nur so naja!
Musste in der meiner Barrier Klasse einen boolean einfügen. Geht es auch irgendwie anders?
Hier erst einmal der Code:
Main:
Java:
package Uebung1;

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Bitte geben Sie die Anzahl der Ausfahren ein: ");
        int anz = s.nextInt();
        Barrier[] barriers = new Barrier[anz];

        for (int i = 0; i < anz; i++) {
            System.out.println("Wartezeit (Ausfahrt" + (i + 1) + ") geoeffnet in s: ");
            int open = s.nextInt();
            System.out.println("Wartezeit (Ausfahrt" + (i + 1) + ")geschlossen in s: ");
            int close = s.nextInt();
            barriers[i] = new Barrier(Integer.toString(i + 1), open, close, -1);
        }

        for (int i = 0; i < anz; i++) {
            barriers[i].start();
        }
        try {
            while (true) {
                char c = (char) br.read();
                if (c == 'q') {
                    for (Barrier v : barriers)
                        v.setRunning(false);
                    System.exit(0);
                }
            }
        } catch (IOException ex) {
            ex.getStackTrace();
        }

        s.close();

    }
}

Barrier:
Java:
package Uebung1;

public class Barrier extends Thread {

    private String name;
    private int open, close, amount;
    private boolean running = true;

    Barrier(String name, int open, int close, int amount) {
        this.name = name;
        this.open = open;
        this.close = close;
        this.amount = amount;
    }

    int getOpen() {
        return open;
    }

    int getClose() {
        return close;
    }

    int getAmount() {
        return amount;
    }
    String getBarrier() {
        return name;
    }

    void setOpen(int open) {
        this.open = open;
    }

    void setClose(int close) {
        this.close = close;
    }

    void setBarrier(String name) {
        this.name = name;
    }
    
    void setRunning(boolean running) {
        this.running = running;
    }

    public void run() {
        while(amount != 0 && running) {
            try {
                System.out.println("Barrier " + getBarrier() + ": Start Opening");
                sleep(80);
                System.out.println("Barrier " + getBarrier() + ": End Opening");
                sleep(getOpen());
                System.out.println("Barrier " + getBarrier() + ": Start Closing");
                sleep(60);
                System.out.println("Barrier " + getBarrier() + ": End Closing");
                sleep(getClose());
                amount--;
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }
    
}


Hab ich das nun richtig verstanden:
Ich starte die Main.java gebe alles Sequenziell ein bis es an dieser Stelle interessant wird:
Java:
  for (int i = 0; i < anz; i++) {

            barriers[i].start();

        }
Nun werden die anz Threads erstellt und laufen bei der Eingabe von -1 Endlos. Das Programm hängt aber nicht in diesem Block fest sondern läuft Sequenziell weiter in die while(true) Schleife. In dieser ändere ich dann für jedes Objekt den boolean Wert von running auf false. Die Threads die daran arbeiten überprüfen den boolean wert und brechen ab.
Jetzt hänge ich vom Kopf her wieso gehen diese dann nicht auch weiter im Programmcode =( Weil es nur "Threads" sind, die dazu keine Berechtigung haben da sie nur für das Objekt barrier gestartet wurden?

Ahhh Sequenzielle Programme sind ja schon Kompliziert doch hiermit wird es ja noch schlimmer :-D
 

MoxxiManagarm

Top Contributor
Ich bin mir unsicher, ob ich dich richtig verstehe, aber ich hätte es in etwa so versucht:
Java:
public class Barrier extends TimerTask {
    private char c;

    public Barrier(char c) {
        this.c = c;
    }

    @Override
    public void run() {
        System.out.println("Hello " + c);
    }

    public static void main(String[] args) throws IOException {
        Timer timer = new Timer();

        timer.schedule(new Barrier('A'), 0, 1000);
        timer.schedule(new Barrier('B'), 0, 1000);

        System.in.read();

        System.out.println("Got you!");
        timer.cancel();
    }
}

Dieses Beispiel gibt bis zur Eingabe (brauch aber einmal Enter) wiederholt "Hallo A" und "Hallo B" aus.
 

ocsme

Top Contributor
Danke doch leider hatte ich das alles noch nicht TimerTask und Timer (timer.schedlue). Da müsste ich mir die Klasse erst mal anschauen :)
Doch wie gesagt Danke :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Hilfe bei Endlosschleife Java Basics - Anfänger-Themen 2
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
noah1407 endlosschleife Java Basics - Anfänger-Themen 7
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
sserio Endlosschleife ja nein? Java Basics - Anfänger-Themen 13
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
S Endlosschleife - Warum? Java Basics - Anfänger-Themen 1
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
C Collatzfolge endlosschleife. Java Basics - Anfänger-Themen 4
D Array in Endlosschleife überschreibt vorherige Werte Java Basics - Anfänger-Themen 4
E Eulersche Zahl berechnen, Endlosschleife Java Basics - Anfänger-Themen 2
N Endlosschleife... Warum? Java Basics - Anfänger-Themen 12
P Kapselung Problem - Endlosschleife Java Basics - Anfänger-Themen 10
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
D Endlosschleife und ich komme nicht raus! Java Basics - Anfänger-Themen 8
N Erste Schritte Endlosschleife und Exception Java Basics - Anfänger-Themen 5
R Endlosschleife nach InputMismatchException Java Basics - Anfänger-Themen 2
S Endlosschleife? Java Basics - Anfänger-Themen 2
T Endlosschleife Java Basics - Anfänger-Themen 2
Z Endlosschleife Java Basics - Anfänger-Themen 6
T Endlosschleife Java Basics - Anfänger-Themen 12
H Wieso ist das eine Endlosschleife? Java Basics - Anfänger-Themen 8
StupidAttack Endlosschleife, Sockets Java Basics - Anfänger-Themen 2
C ungewollte Abbrüche in einer Endlosschleife Java Basics - Anfänger-Themen 6
E komische endlosschleife Java Basics - Anfänger-Themen 6
7 Endlosschleife pausieren Java Basics - Anfänger-Themen 11
F .readLine() erzeugt endlosschleife Java Basics - Anfänger-Themen 4
R Wieso hänge ich hier in einer Endlosschleife (vermute ich zumindest)? Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
R warum endlosschleife? Java Basics - Anfänger-Themen 7
W Fakultät, warum Endlosschleife? Java Basics - Anfänger-Themen 15
S JTable Endlosschleife Java Basics - Anfänger-Themen 5
J Aus endlosschleife kommen Java Basics - Anfänger-Themen 5
R Endlosschleife verhindert das Schließen des Fensters Java Basics - Anfänger-Themen 10
Povlsen84 Endlosschleife Java Basics - Anfänger-Themen 5
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
Antoras Endlosschleife Java Basics - Anfänger-Themen 8
J Wartezustand in Endlosschleife - bessere Alternativen Java Basics - Anfänger-Themen 20
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
N Endlosschleife? Java Basics - Anfänger-Themen 3
V mehrere Threads starten + Endlosschleife Java Basics - Anfänger-Themen 3
I Hilfe wer findet mein Fehler in bei der Endlosschleife Java Basics - Anfänger-Themen 7
G Sound/Endlosschleife/Abbruchproblem Java Basics - Anfänger-Themen 3
G HappyNumbers - Endlosschleife Java Basics - Anfänger-Themen 11
0 Endlosschleife beim Integer Array mischen? Java Basics - Anfänger-Themen 3
M OutputStream funktioniert nur in Endlosschleife ? Java Basics - Anfänger-Themen 4
G Endlosschleife, aber warum? Java Basics - Anfänger-Themen 12
G Endlosschleife beenden Java Basics - Anfänger-Themen 10
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
SaschaMeyer Iterationsdurchlauf abbrechen Java Basics - Anfänger-Themen 16
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
C InputStreamReader Eingabeprozess abbrechen Java Basics - Anfänger-Themen 8
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
Z JTextField - getText() Methode abbrechen? Java Basics - Anfänger-Themen 8
A Gui Abbrechen Butto Java Basics - Anfänger-Themen 6
T thread abbrechen Java Basics - Anfänger-Themen 5
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
E Executorservice abbrechen? Java Basics - Anfänger-Themen 2
P Verschachtelte Schleife vorzeitig abbrechen. Java Basics - Anfänger-Themen 50
A for schleife frühzeitig abbrechen Java Basics - Anfänger-Themen 25
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
M Methode abbrechen funktioniert nicht?! Java Basics - Anfänger-Themen 2
M readXYZ von DataInputStream abbrechen/timeout auslösen Java Basics - Anfänger-Themen 6
M Objekterstellung abbrechen? Java Basics - Anfänger-Themen 10
F Methode abbrechen Java Basics - Anfänger-Themen 16
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
B OOP Objekt klonen (Grundzustand), um in Editor "Abbrechen" zu können Java Basics - Anfänger-Themen 4
S [JAVA] Erstellung eines Objekts abbrechen?! Java Basics - Anfänger-Themen 7
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
Developer_X Endlos-Schleifen abbrechen Java Basics - Anfänger-Themen 5
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
S Schleife per Tastendruck abbrechen Java Basics - Anfänger-Themen 7
G Wie entferne ich einen "Abbrechen" Button? Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
S While-Schleife nach 10 sekunden abbrechen. Java Basics - Anfänger-Themen 20
K void Methode abbrechen Java Basics - Anfänger-Themen 7
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
W Schaltjahr abbrechen wenn <1583 Java Basics - Anfänger-Themen 11
G FileNotFoundException beim Drücken des "Abbrechen" Java Basics - Anfänger-Themen 3
B Programm abbrechen Java Basics - Anfänger-Themen 2
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
J Swing Komponente soll Thread starten und abbrechen Java Basics - Anfänger-Themen 6
P FileChooser richtig abbrechen? Java Basics - Anfänger-Themen 3
G REkursion vorzeitig abbrechen Java Basics - Anfänger-Themen 4
G while-Schleife von aussen abbrechen Java Basics - Anfänger-Themen 8
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
G imports einlesen und nach den imports abbrechen Java Basics - Anfänger-Themen 4
L Ablauf abbrechen und zurück Java Basics - Anfänger-Themen 20
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben