Ich möchte eine Zeile aus der Tastatur einlesen (Das brauch ich für meinen Client - dieser nutzt einen Web Service) und das funktioniert auch in Eclipse. Aber sobald ich die Ubuntu-Konsole starte und da was einlesen will, hängt die Konsole, als wäre sie in einer Endlosschleife.
poste mal deinen Code , sonst kann man schlecht sehen woran es liegen könnte ^^
Hier mal ein Beispiel für einen Scanner , der funktioniert
Java:
package grundlagen;importjava.util.Scanner;publicclassTextScanner{privateString v ="";privateString n ="";privateString g ="";publicTextScanner(){Scanner sc =newScanner(System.in);System.out.println("Wie ist Ihr vorname ?");this.v = sc.nextLine();System.out.println("Wie ist Ihr Nachname ?");this.n = sc.nextLine();System.out.println("Wann sind Sie geboren ?");this.g = sc.nextLine();
sc.close();System.out.println(v+n+g);}publicstaticvoidmain(String[]args){newTextScanner();}}
Danke erstmal. Mich verwundert, dass es nicht geht, weil vor zwei Wochen sollte ich als Aufgabe Sockets programmieren (Also zwischen Server und Client) und da hat das perfekt geklappt. Diesmal handelt es sich um ein WebService(also vom Sinn her nichts überraschendes mehr) und plötzlich kann ich nicht mehr Eingaben einlesen, in der Konsole(In Eclipse klappt alles hervorragend) :bloed:
Java:
importjava.io.BufferedReader;importjava.io.InputStreamReader;importrps.services.ist.RPSService;importrps.services.ist.RPSServiceService;publicclassClient{privatestaticint id =0;privatestaticint nochmal =0;publicstaticvoidmain(String[] args)throwsException{//ConnectionRPSServiceService service =newRPSServiceService();RPSService rps = service.getRPSServicePort();//Create Game
id = rps.createGame();System.out.println("Created game: "+(id+1));//Play Gamedo{for(int i =0; i <10; i++){Scanner sc =newScanner(System.in);System.out.println("Bitte eine Zahl eingeben: 1 = Rock, 2 = Paper, 3 = Scissors, 4 = Abbruch ");int zahl =Integer.parseInt(br1.readLine());if(zahl ==4){break;}System.out.println("Runde:"+(i+1)+"\n"+ rps.play(id, zahl));}System.out.println(rps.getGameStatistics(id));BufferedReader br2 =newBufferedReader(newInputStreamReader(System.in));System.out.println("\nNochmal spielen? 0 für JA und 1 für NEIN: ");
nochmal =Integer.parseInt(br2.readLine());}while(nochmal ==0);}}
BufferedReader br2 =newBufferedReader(newInputStreamReader(System.in));System.out.println("\nNochmal spielen? 0 für JA und 1 für NEIN: ");
nochmal =Integer.parseInt(br2.readLine());}while(nochmal ==0);
du hast keine variable "nochmal" aber versuchst diese auf den Wert 0 zu parsen ?
[EDIT]
ich schätze mal darum bleibt dein Programm auch in der endlos Schleife, der Standartwert einer Integer Variable ist immer "0" also ist nochmal , auch wenn es nicht definiert ist immer "0" ergo == Endlosschleife
[/EDIT]
Du initialisierst eine statische variable "nochmal" mit dem Wert "0", prüfst aber nirgends ob dieser wert durch eine Eingabe evtl auf "1" gesetzt wird, wenn ich mich jetzt nicht verguckt habe, wenn du bei dem Teil des Codes ankommst in dem der Reader zwar die eingabe einliest aber nicht prüft ob der Wert verändert wird, ist der wert also automatisch immernoch "0"
da fehlt irgendwie die abfrage ob die eingabe ebend nicht "0" ist ^^
Ich bleibe in der Schleife, solange "nochmal == 0" und kurz vor Schleifenende mache ich ja die Eingabe und wenn die Eingabe != 0 ist, dann soll er abbrechen.
Also wie gesagt in Eclipse funktioniert das auch hervorragend. Aber ich versuch mal den Scanner den du gepostet hast umzusetzen.
das sollte mit BufferedReader aber eigentlich auch funktionieren ....., bleibt er denn an dem Punkt in der Endlosschleife ? oder wie macht sich das bemerkbar, liest er weitere eingaben nicht ein ?
Nein er gibt nichts zurück... als ob er immer noch auf eine Eingabe wartet. Und ich bin mir sicher, dass es am Einlesen liegt. ich hab nämlich vorher einige Zufallszahlen generiert und da ist das Programm schön durchgelaufen aber sobald ich eine Eingabe machen muss wartet er unendlich lange :bahnhof:
ich vermute mal du schliesst den Scanner und den Reader weiter unten?
denn bis zu dem Zeitpunkt an dem du per Reader einlesen willst ist der scanner auch noch offen , zumindest in dem Code den du gepostet hast
ggf. liegt es daran das der Scanner zu dem Zeitpunkt an dem du den Reader öffnest immernoch offen ist, hast du mal versucht den ersten scanner vor dem Reader zu schliessen, und dann in der while schleife insofern deine bedingung erfüllt ist einfach einen zweiten scanner zu starten ?
bei 1 bleibt beendet er das spiel und schliesst den scanner
bei 0 startet er die schleife von vorne
funktioniert soweit
Java:
package versuche;importjava.util.Scanner;publicclassFoo{staticint nochmal =0;staticScanner sc;publicvoid doSchleife (){do{
sc =newScanner(System.in);System.out.println("abbrechen ?");
nochmal =Integer.parseInt(sc.nextLine());if(nochmal ==0){System.out.println("Spiel wurde beendet");}elseif(nochmal ==1){System.out.println("neues Spiel wird gestartet");
sc.close();}}while(nochmal ==0);}publicstaticvoidmain(String[]args){newFoo().doSchleife();}}
Ausgabe :
Java:
abbrechen ?0Spiel wurde beendet
//Scanner ist noch offen und schleife startet erneut
abbrechen ?1
neues Spiel wird gestartet
//Scanner ist zu und schleife beendet
Scanner sc =newScanner(System.in);System.out.println("Bitte eine Zahl eingeben: 1 = Rock, 2 = Paper, 3 = Scissors, 4 = Abbruch ");int zahl =Integer.parseInt(br1.readLine());// hier hast du noch br1 statt sc geschrieben
Ich hab deines jetzt gestartet und das funktioniert auch nicht. Und ich glaub ich weiß wieso. der Prof hat uns ein ant-File mitgegeben, mit dem wir das Programm starten sollen - also einmal "ant server" und dann "ant client" und sobald ich den Client mit "ant client" aufrufe, kommt dieser Schmarrn, wenn ich den Code normal aufrufe funktioniert er !