1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

von tastatur lesen ohne blockieren

  • Grantnzipf
  • 12. Februar 2007 um 02:58
  • Unerledigt
  • Grantnzipf
    4
    Grantnzipf
    Mitglied
    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
    14
    java-girl
    Mitglied
    Reaktionen
    7
    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!

    There's no better place than 127.0.0.1!

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    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

    640K ought to be enough for anybody. :eek2:

  • Paulchen
    1
    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 :grinning_squinting_face:

    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
    17
    MaxAuthority
    Gewinner des Desktop-Contest 2002
    Reaktionen
    5
    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.

    http://vimperator.org - Make Firefox behave like Vim

  • Grantnzipf
    4
    Grantnzipf
    Mitglied
    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
    4
    Grantnzipf
    Mitglied
    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
    1
    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
    4
    Grantnzipf
    Mitglied
    Punkte
    125
    Beiträge
    19
    • 14. Februar 2007 um 14:22
    • #9

    weltklasse
    vielen dank!!

  • Grantnzipf
    4
    Grantnzipf
    Mitglied
    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
    8
    Korrupt
    Mitglied
    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.

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

  • Vevusio
    6
    Vevusio
    Mitglied
    Reaktionen
    1
    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

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

  • Grantnzipf
    4
    Grantnzipf
    Mitglied
    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
    10
    phudy
    Mitglied
    Reaktionen
    12
    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
    1
    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.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung