Ich habe mehrere Threads. Jeder Thread hat eine while (true) Schleife im Inneren, wo ich Zyklus für Zyklus Text hinzufüge. Ich finde keine gute Methode, die while (true) Schleife mit einem Flag so zu ändern, dass ich die Datei schließen kann, wenn ich aus dem Zyklus herauskomme. Ich möchte dies tun, wenn ich zum Beispiel etwas eintippe oder wenn ich den roten Knopf Eclipse drücke.Wie kann ich die Ausführung der While-Schleife mit einer Tastatureingabe stoppen?
Dies ist der Konstruktor (Node ist ein Thread)
public Node(Channel c, int address) {
my_address=address;
try {
writer = new CSVWriter(new FileWriter(my_address + "_id.csv"), ',', ' ' , ' ' ,"\n");
writer2 = new CSVWriter(new FileWriter(my_address + "_label.csv"), ',', ' ' , ' ' ,"\n");
String[] entries = "num#state#duration#event#condition#condition result#action1#action2#backoff value".split("#");
writer.writeNext(entries);
writer2.writeNext(entries);
} catch (IOException e) {
e.printStackTrace();
}
}
Dies ist die Schleife, in der I die Datei ändern:
while (true) {
//write id value
String id_to_split = num+"#"+fsm.current_state.nome+"#"+tempo_minore+"#"+
fsm.current_transition.e.getId()+"#"+ fsm.current_transition.c.getId()+"#"+
fsm.current_transition.c.getFlag()+"#"+fsm.current_transition.a.getId()+"#"+
fsm.current_transition.a2.getId()+"#"+backoff;
String[] id_entries = id_to_split.split("#");
writer.writeNext(id_entries);
//write name
String label_to_split = num+"#"+fsm.current_state.nome+"#"+tempo_minore+"#"+
fsm.current_transition.e.getLabel()+"#"+fsm.current_transition.c.getLabel()+"#"+
fsm.current_transition.c.getFlag()+"#"+fsm.current_transition.a.getLabel()+"#"+
fsm.current_transition.a2.getLabel()+"#"+backoff;
String[] label_entries = label_to_split.split("#");
writer2.writeNext(label_entries);
num++;
}
closeCSVs();
}
Die Methode closeCSVs():
public void closeCSVs() {
try {
writer.close();
writer2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Bitte schreiben einige Code-Beispiele implementieren. –
Wie wäre es, die Datei nach der Schleife zu schließen und die Schleife zu unterbrechen, wenn eine bestimmte Bedingung erfüllt ist? Welcher Zustand ist zu prüfen und wie geht es Ihnen? Ich würde den Dateistream auch nicht im Konstruktor (des Threads?) Öffnen, sondern direkt vor dem Eintritt in die Schleife, wenn das möglich ist. – Thomas
Um den Code zu reparieren, um zu tun, was Sie wollen, müssen Sie höchstwahrscheinlich ändern. –