Multithread - Input verrutscht während etwas ausgegeben wird

schemil053

Mitglied
1663512243460.png
Ich habe das Problem, dass bei meinem Java-Programm, welches Multithread ist, der Output und der Input verrutscht.
Wie kann ich das Problem lösen, dass es Beispielsweise so aussieht:
1663512323039.png

Ich würde es bevorzugen, so wenig Bibliotheken zu nutzen.
Aktuell verwende ich die Scanner-Klasse zum lesen und System.out zum schreiben.
Danke für jede Hilfe!
 

httpdigest

Top Contributor
Du könntest einen expliziten Lock oder synchronized(dasselbeObjekt) verwenden, um die Codeblöcke, die Eingabe und Ausgabe machen, untereinander zu synchronisieren. Das heißt, dass du z.B. während eines Scanner.nextLine() nichts ausgeben kannst, während der Scanner auf den Input wartet.
Also:
Java:
Object lock = new Object();
(jede Ausgabestelle):
Java:
synchronized (lock) {
  System.out.println(...);
}
(jede Eingabestelle):
Java:
Scanner scanner = ...
String eingabe;
synchronized (lock) {
  eingabe = scanner.nextLine();
}
// mit eingabe was tun
 

schemil053

Mitglied
Du könntest einen expliziten Lock oder synchronized(dasselbeObjekt) verwenden, um die Codeblöcke, die Eingabe und Ausgabe machen, untereinander zu synchronisieren. Das heißt, dass du z.B. während eines Scanner.nextLine() nichts ausgeben kannst, während der Scanner auf den Input wartet.
Das Problem ist, es soll gleichzeitig was ausgegeben werden, während gelesen wird.
 

httpdigest

Top Contributor
Das Problem ist, es soll gleichzeitig was ausgegeben werden, während gelesen wird.
Das funktioniert dann nicht, weil sich ja deine Terminaleingaben dann überschneiden mit den Terminalausgaben.
Also: Das Terminal selbst kann nicht deine Eingaben an derselben Stelle halten während der Prozess Ausgaben an das Terminal sendet.

Das ist aber nur ein Anzeigeproblem des Terminals selbst. Du wirst feststellen, dass die Eingabe, die du machst, auch als solches korrekt vom Programm eingelesen wird. Das Terminal zeigt die Zeichen nur eben über mehrere Zeilen verstreut an.
 

schemil053

Mitglied
Das funktioniert dann nicht, weil sich ja deine Terminaleingaben dann überschneiden mit den Terminalausgaben.
Also: Das Terminal selbst kann nicht deine Eingaben an derselben Stelle halten während der Prozess Ausgaben an das Terminal sendet.

Das ist aber nur ein Anzeigeproblem des Terminals selbst. Du wirst feststellen, dass die Eingabe, die du machst, auch als solches korrekt vom Programm eingelesen wird. Das Terminal zeigt die Zeichen nur eben über mehrere Zeilen verstreut an.
es gibt viele Programme, die dieses kleine Problem nicht haben, es wäre nur wichtig, dass während input reinkommt auch output rauskommt. Es ist eine Art "Konsole" die ein Webpanel besitzt und damit andere Programme managen kann
 

httpdigest

Top Contributor
Das ist mit Java-Boardmitteln alleine nicht realisierbar, da du hierfür betriebssystemabhängige Funktionen nutzen musst, um das Terminal von buffered/line-mode in character/raw mode zu bringen. Dann bekommst du auch Eingaben character-weise mit und nicht nur line-buffered, so dass du dann die bis jetzt eingegebenen Character neuzeichnen und den Cursor setzen kannst, jedesmal, wenn eine Ausgabe getätigt wurde.
Mit dem default line-mode des Terminals ist das gewünschte Verhalten nicht realisierbar.
Du brauchst hierfür so etwas wie "ncurses", nur für Java.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
B Multithread mode funktioiernt nicht wie gewünscht Java Basics - Anfänger-Themen 4
V Multithread NullPointerException verhindern Java Basics - Anfänger-Themen 8
D Multithread Sockets"Address already in use"Error Java Basics - Anfänger-Themen 11
G Multithread /DatagramPacket Problem Java Basics - Anfänger-Themen 3
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
S String mit Int input vergleichen Java Basics - Anfänger-Themen 5
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
JD_1998 Vektorrechner; User Input -> Index out of bounds Java Basics - Anfänger-Themen 3
I Array übernimmt immer den letzten Input. Java Basics - Anfänger-Themen 14
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
J Sharing Audio input Java Basics - Anfänger-Themen 6
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
O Input/Output newbile und keine Ahnung! Java Basics - Anfänger-Themen 16
D [AES] input not multiple of 16 Java Basics - Anfänger-Themen 2
J Input/Output Input als Parameter an Methoden übergeben Java Basics - Anfänger-Themen 23
J Input-Variable nicht sichtbar Java Basics - Anfänger-Themen 2
T '>' vor Console input Java Basics - Anfänger-Themen 3
J Input/Output Input Buttons Html mit JSP Java Basics - Anfänger-Themen 3
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
S Tastatur input lesen Java Basics - Anfänger-Themen 7
I Datentypen input.nextCharAt(0) wirft einen Fehler Java Basics - Anfänger-Themen 3
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
H Methode mit späterem Input Java Basics - Anfänger-Themen 3
S Input/Output Doppelte Input-Abfrage Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
T Java Input Java Basics - Anfänger-Themen 6
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
S LinkedList mit Input vergleichen. Java Basics - Anfänger-Themen 5
A Input/Output Input eingabe in unicode übersetzen Java Basics - Anfänger-Themen 3
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
L JTextField/Listener Input Problem Java Basics - Anfänger-Themen 2
O OOP Input & Output in der GUI-Programmierung Java Basics - Anfänger-Themen 2
C Input & Output Frage Java Basics - Anfänger-Themen 4
E Input & Output Problem Java Basics - Anfänger-Themen 7
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
A Input/Output Input überprüfen und weiterverarbeiten Java Basics - Anfänger-Themen 10
R User Input wird übersprungen?! Java Basics - Anfänger-Themen 17
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
B do while (input = zahl) Java Basics - Anfänger-Themen 6
H Text ausdrucken, den ich entweder direkt in die Kommandozeile schreibe, oder über input redirect übe Java Basics - Anfänger-Themen 2
S Input/Output Data-Input/Output-Stream Java Basics - Anfänger-Themen 2
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
M Output Input im Cmd Fenster Java Basics - Anfänger-Themen 7
S Input (Blutiger Anfänger) Java Basics - Anfänger-Themen 18
P HTML <input> Feld in einem JLabel auslesen Java Basics - Anfänger-Themen 4
A HSSFWorkbook als Return-Wert für Input in andere Methode Java Basics - Anfänger-Themen 5
S Arrays - Fehler bei der Verarbeitung: For input string: "Berlin" Java Basics - Anfänger-Themen 14
B NumberFormatException: For input string: "" Java Basics - Anfänger-Themen 4
C OOP Java Projekt Bankautomat input fehler Java Basics - Anfänger-Themen 14
D Input Output Java Basics - Anfänger-Themen 8
Spin IllegalArgumentException Input == null Java Basics - Anfänger-Themen 7
N Probleme mit Input/OutputStreams, Daten im Speicher verwalte Java Basics - Anfänger-Themen 2
D Input Scanner Java Basics - Anfänger-Themen 9
F Java login & input (html). Java Basics - Anfänger-Themen 4
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
F Verwenden von Input innerhalb eines Applets Java Basics - Anfänger-Themen 3
L StdIn Stdout / Input Output Aufgabe Java Basics - Anfänger-Themen 3
M Input/Output Stream aus einem String Java Basics - Anfänger-Themen 2
G Input Dialog Problem Java Basics - Anfänger-Themen 11
F Input kann nicht verglichen werden Java Basics - Anfänger-Themen 6
J File Input/Output und Applet Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben