• Für ein konsolenbasiertes Terminal&Chat-Programm muss ich die Eingabe des benutzers zeichenweise einlesen. Ich habe es schon mit den verschiedensten Subclasses von InputStream probiert und habe immer das gleiche Problem: Die eingegebenen Zeichen erscheinen immer erst dann am Bildschirm, wenn die ENTER-Taste gedrückt wurde...

    Hier der Code:
    (DataInputStream con ist stdin also Tastatureingabe, char ch ist das eingelesene Zeichen, PrintWriter out ist die Klasse welche das Zeichen übers Netzwerk sendet)

    Code
    while(con.available()>0)
    			  {
    			      ch=(char)con.read();
    			      System.out.flush();
    			      if(ch==9) //TAB-gedrückt -Abbruch
    				  break;
    			      out.print(ch);
    			      out.flush();
    			  }

    Daraus, dass das TAB-Zeichen auch erst registriert wird, wenn ENTER gedrückt wurde, kann man sehen, dass die Zeichen mit read() erst dann eingelesen werden, wenn ENTER gedrückt wurde. Hat irgendjemand eine Idee wie ich gleich an meine Zeichen komme??

  • Zeichenweises einlesen geht in Java afaik nicht. Dein Programm "sieht" den Input von STDIN erst nachdem <Enter> (kann aber plattformabhängig was aderes sein, obwohl ichs nicht glaub) gedrückt wurde.

    Die einzig wirklich brauchbare Lösung ist eine, die erst ab JDK 1.4 funktioniert: Buffer (in dem Fall wohl konkret CharBuffer oder ByteBuffer). Du müsstest eine plattformspezifische - ANSI C bietet sich da an... - Methode schreiben und sie mittels JNI einbinden. Buffer sind so designed, dass sie problemlos mit native Methoden zusammen verwendet werden können. Du findest sie in der Package java.nio

    I invented ctrl-alt-del but Bill [Gates] made it famous
    Dave Bradly, IBM PC designer

  • hab jetzt eine lösung mit 2 Threads gefunden... der eine liest die ganze zeit vom netzwerk und der andere liest mir System.in.read() jeweils ein Zeichen ein und sendet es.. funktioniert super, war halt viel umständlicher...

    trotzdem danke!:thumb:

  • Unter Linux gibts die Möglichkeit, wirklich jedes Zeichen einzeln einzulesen, dazu muß man allerdings vorher im Terminal irgendein Kommando eingeben...weiß allerdings nicht mehr, was das war, wurde aber im Forum schon mal gepostet...

    yast, SuSEconfig, apt-get and rpm - the 4 horsemen of the apocalypse

    Platform of insanity :: http://www.dose-xp.org

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!