von tastatur lesen ohne blockieren

  • hallo,
    hat jemande vielleicht ne ahnung wie man unter java einzelne zeichen einlesen kann ohne enter zu drücken? find da nix, wie man verwerfen tut usw.

    gr.

    Ist es wichtig, dass du das selbst programmierst? Wenn nicht kenne ich da eine tolle fertige Klasse!

    There's no better place than 127.0.0.1!

  • Hm, ich denke eher, dass Grantnzipf sowas wie getch() in C sucht, um einzelne Zeichen von der Standardeingabe zu lesen, ohne dass der Benutzer Enter drücken muss.

    Hab da kurz gegooglet, wenn ichs richtig verstanden hab, handelt es sich um diese Bugs in Java, die seit Jahren nicht ordentlich gefixt wurden:

    Die Kommentare zu diesen Bugs sind recht unterhaltsam zu lesen :D

    Ich habs grad das ausprobiert, funktioniert ausgezeichnet: http://www.windsong.demon.co.uk/getchsig.zip

    Das ist ein Wrapper, der via JNI die Funktion getch() von C für Java-Programme zur Verfügung stellt.

  • Hm, ich denke eher, dass Grantnzipf sowas wie getch() in C sucht, um einzelne Zeichen von der Standardeingabe zu lesen, ohne dass der Benutzer Enter drücken muss.

    Musst da unter C (zumindest in unix) auch extra eine terminal option setzen wennst mit getc() was einlesen willst und ums line buffering herumkommen willst?

    Mit getch() mags vl. gehen aber, das ist ja eine ncurses-funktion, und somit nicht mehr im C standard.

  • danke für die antworten! damit kann ich schon was anfangen!

    stty raw -echo
    option=`dd count=1 bs=1 2> /dev/null`
    stty -raw echo


    ihr kennts das vielleicht aus der linux-shell

    dachte mir dass man sollch code vielleicht als script aus java heraus aufrufen kann....
    höhö.. so in etwa.. aufruf, script schreibt char in datei und java liest eingabe char aus datei...
    müsste eigentlich gehn, habs aber noch nicht probiert

  • wie krieg ich das zum laufen?
    make funzt nicht

    Bei mir hilft dieser Patch:

    Oder kurz:

    Code
    -lstdc++-3-libc6.2-2-2.10.0


    durch

    Code
    -lstdc++

    ersetzen.

  • trau mich fast nicht zu fragen, aber wenn ich zB.

    int z = com.stevegilham.util.IO.getch();
    System.out.println( z);

    bekomm ich eine leere konsole.
    drück ich dann enter steht da dann 10, drück ich 1 steht da dann 49, usw..
    was mach ich denn falsch??

  • das sind die integer-werte für die eingegebenen zeichen lt ascii-tabelle. aber es ist kein wunder, dass er sowas ausgibt. schau mal genau deinen code an:

    Code
    [B]int[/B] z = com.stevegilham.util.IO.getch();


    dabei muss der integer-wert des eingegebenen zeichens rauskommen.

    ich weiss zwar jetzt nicht was getch() zurückliefert, aber wie es scheint, musst du es konvertieren, bevor du es weiter verarbeitest.

    *** Ich würde gern die Welt verändern, aber Gott gibt mir den Quelltext nicht ***

  • wenn du den rückgabewert in einen int schreibst und den int ausgibst bekommst du den acii code, nimm char

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • vorsicht beim "make clean":

    der macht tatsaechlich ein "rm -f /*.o" wenn das o auch noch weg waere, na dann bum, und wenn der punkt dann auch noch..........

    [edit]
    das wird vielleicht den ein oder anderen interessieren: http://java.sun.com/javase/6/docs/…io/Console.html @since 1.6
    hehe, etwas weiter unten im bugdetail steht geschrieben:

    Zitat von cowwoc@bugs.sun.com

    Everyone, please go vote for #6351276. Console does not support reading individual characters!

  • der macht tatsaechlich ein "rm -f /*.o" wenn das o auch noch weg waere, na dann bum, und wenn der punkt dann auch noch..........

    ... und wenn der, der "make clean" ausführt, dann auch so wahnsinnig ist und das als root ausführt, dann fällt das in die Kategorie SSKM.

    Aber, ich gehs zu, der / ist da etwas merkwürdig...

Jetzt mitmachen!

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