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.
von tastatur lesen ohne blockieren
-
Grantnzipf -
12. Februar 2007 um 02:58 -
Unerledigt
-
-
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!
-
lol, dann sags doch.. =)
Grantnzipf: das wird dir weiterhelfen: http://www.addison-wesley.de/Service/Krueger/kap19006.htm -
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
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 echoihr 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 -
Ich habs grad das ausprobiert, funktioniert ausgezeichnet: http://www.windsong.demon.co.uk/getchsig.zipDas 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 -
wie krieg ich das zum laufen?
make funzt nichtBei mir hilft dieser Patch:
Diff
Alles anzeigen--- 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 $@
Oder kurz:
durchersetzen.
-
weltklasse
vielen dank!! -
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:
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.
-
wenn du den rückgabewert in einen int schreibst und den int ausgibst bekommst du den acii code, nimm char
-
ja hab ich mir gedacht und jetz hauts auch hin...
ich dank euch -
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.comEveryone, 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...
-
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!