1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

von tastatur lesen ohne blockieren

  • Grantnzipf
  • 12. Februar 2007 um 02:58
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 12. Februar 2007 um 02:58
    • #1

    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.

  • java-girl
    Punkte
    2.037
    Beiträge
    357
    • 12. Februar 2007 um 08:14
    • #2
    Zitat von Grantnzipf

    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!

  • Swoncen
    Punkte
    5.331
    Beiträge
    993
    • 12. Februar 2007 um 09:11
    • #3

    lol, dann sags doch.. =)

    Grantnzipf: das wird dir weiterhelfen: http://www.addison-wesley.de/Service/Krueger/kap19006.htm

  • Paulchen
    Gast
    • 12. Februar 2007 um 12:43
    • #4

    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:

    • http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4050435
    • http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6351276

    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.

  • MaxAuthority
    Punkte
    3.165
    Beiträge
    626
    • 12. Februar 2007 um 16:16
    • #5
    Zitat von Paulchen

    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.

  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 12. Februar 2007 um 18:01
    • #6

    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

  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 13. Februar 2007 um 00:55
    • #7
    Zitat von Paulchen


    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.


    wie krieg ich das zum laufen?
    make funzt nicht

  • Paulchen
    Gast
    • 13. Februar 2007 um 11:39
    • #8
    Zitat von Grantnzipf

    wie krieg ich das zum laufen?
    make funzt nicht

    Bei mir hilft dieser Patch:

    Diff
    --- Makefile.ori        2004-02-26 20:37:58.000000000 +0100
    +++ Makefile    2007-02-12 12:35:22.000000000 +0100
    @@ -5,7 +5,7 @@ Cxxobj = g++ -c -Wall -I$(JAVAINC) -I$(J
     OBJFILES = getch.o
    
    
     libcom_stevegilham_util_IO.so: $(OBJFILES)
    -       g++ -shared -lstdc++-3-libc6.2-2-2.10.0 -lcurses -o libcom_stevegilham_util_IO.so $(OBJFILES)
    +       g++ -shared -lstdc++ -lcurses -o libcom_stevegilham_util_IO.so $(OBJFILES)
    
    
     getch.o: getch.cpp
            $(Cxxobj) $< -o $@
    Alles anzeigen

    Oder kurz:

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


    durch

    Code
    -lstdc++

    ersetzen.

  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 14. Februar 2007 um 14:22
    • #9

    weltklasse
    vielen dank!!

  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 14. Februar 2007 um 20:06
    • #10

    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??

  • Korrupt
    Punkte
    605
    Beiträge
    110
    • 15. Februar 2007 um 00:15
    • #11

    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.

  • Vevusio
    Punkte
    371
    Beiträge
    71
    • 15. Februar 2007 um 00:20
    • #12

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

  • Grantnzipf
    Punkte
    125
    Beiträge
    19
    • 15. Februar 2007 um 01:09
    • #13

    ja hab ich mir gedacht und jetz hauts auch hin...
    ich dank euch

  • phudy
    Punkte
    1.087
    Beiträge
    182
    • 15. Februar 2007 um 02:02
    • #14

    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!

  • Paulchen
    Gast
    • 15. Februar 2007 um 11:05
    • #15
    Zitat von phudy

    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...

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum