Lesen von System.in in mehreren ThreadsJava

Java-Forum
Guest
 Lesen von System.in in mehreren Threads

Post by Guest »

Ich habe das folgende Problem:
  • Methode1, die ständig aus System.in liest und über Socket sendet
  • Methode2, die nur aus System.in liest, wenn darin ein Fehler auftritt
Wenn ich ein Problem in Methode2 habe, Ich muss zweimal die EINGABETASTE drücken, denn selbst wenn der Socket geschlossen wird, wird readLine() angezeigt on Methode1 wurde bereits ausgeführt, also liest es zuerst die Zeile für Methode1 und übernimmt dann die Eingabe für Methode2.
Bearbeiten:
Die Methode1 ist Ich erhalte ständig Nachrichten vom Socket und Methode 2 sendet alles, was ich auf der Konsole eingebe, über den Socket. Aber wenn der Empfang von Nachrichten fehlschlägt, möchte ich nur fragen, ob der Client eine Verbindung zu einem anderen Server herstellen möchte, aber die Methode1 hat die Zeile bereits gelesen, sodass ich beim ersten Eingeben zur jetzt nutzlosen Methode1 übergehe und die zweite Zeile korrekt angezeigt wird zu Methode2
Was kann ich in diesem Fall tun?
Beobachtung: Ich weiß, dass ich im Beispiel den Reader als Klasseneigenschaft machen kann. Nur so gemacht, um das Verständnis zu erleichtern

Code: Select all

public class App {

public void method1() {
new Thread(() -> {
String line;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
while (!socket.isClosed() && line = bufferedReader.readLine() != null) {
//Keeps reading from the System.in and sending to the Socket
}
}).start();
}

public void method2() {
try {
//Keeps receiving messages from the Socket
} catch (Exception e) {
socket.close();
String line;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
line = bufferedReader.readLine();
//Asks if the user want to connect to other server
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post