Programm per Tastendruck beenden

Status
Nicht offen für weitere Antworten.

rom4o

Mitglied
Hallo Leute, ich habe hier ein Programm,
das ich per Tastendruck, egal welche Taste, beenden möchte.
Die Variante, Taste drücken und anschließend return, kenne ich.
Möchte aber das Programm ohne anschließendes return beenden.
Ich habe schon die anderen Beiträge, im Forum, dazu gelesen, das Problem wurde nicht gelöst.
Es wurde behauptet, dass dies in reinen Konsolenanwendungen nicht möglich sei, kann ich aber nicht glauben.

Also hier mein Programm:
Code:
public class ThreadTest {
	static final int LIMIT = 201;
	public static void main(String[]args){
		Thread ta = new ThreadA();
		Thread tb = new ThreadB();
		ta.start();
		tb.start();
		System.out.println("   DONE...");		
	} //main	
} //end of class ThreadTest

/////

class ThreadA extends Thread{
	public void run(){
		for(int i=1;i<ThreadTest.LIMIT;i++){
			
			try{
				sleep(40); //schlafe 40ms
			}catch(InterruptedException e){}
			
			System.out.println("A: " + i);
		} //for
	System.out.println("A done");
	} //run
} //end of class ThreadA

class ThreadB extends Thread{
	public void run(){
		for(int i=-1;i>-ThreadTest.LIMIT;i--){
			
			try{
				sleep(20); //schlafe 20ms
			}catch(InterruptedException e){}
			
			System.out.println("     B: " + i);
		} //for
	System.out.println("     B done");
	} //run
} //end of class ThreadB

Ich habe mir gedacht, vielleicht einen eigenen Thread schreiben der eine Eingabe verarbeitet, und dementsprechend
reagiert.
Aber ich weiss nicht wie????

Bin euch sehr dankbar für Ratschläge.

Grüsse rom4o
 

Niki

Top Contributor
Hier sind einige Leute im Forum die wirklich Ahnung haben von dem was sie schreiben. Wenn sie sagen es geht nicht, dann würd ich ihnen einfach glauben und eine andere Lösung suchen.
Soweit ich weß geht es nicht, du bekommst die Eingabe erst nach einem Enter mit.
 

rom4o

Mitglied
Ich bezweifle überhaupt nicht, dass die Leute hier Ahnung haben,
aber für dieses auf den ersten Blick simpel erscheinende Problem
kann ich einfach nicht glauben, dass es da keine Lösung gibt.

Wie sieht denn nativer Code in Java aus?

Danke für die Antworten bisher
 

Wildcard

Top Contributor
rom4o hat gesagt.:
Ich bezweifle überhaupt nicht, dass die Leute hier Ahnung haben,
aber für dieses auf den ersten Blick simpel erscheinende Problem
kann ich einfach nicht glauben, dass es da keine Lösung gibt.
Den Tastaturpuffer anzuzapfen ist so simple nicht. Besonders nicht, wenn du das Plattformunabhängig haben möchtest.
 

rom4o

Mitglied
Hallo verstehe, es ist also eigentlich nicht möglich.
Ich möchte das schon plattformunabhängig haben, und habe auch keine
Lust nur für diese Problem jetzt eine ganz ander Programmiertechnik zu erlernen.
Gibt es nicht irgend eine Methode die als Eingabe ein Char erwartet und dann
sofort etwas beliebiges ausführt?
Das wäre doch dann "schon" die Lösung.

:roll:
 

Illuvatar

Top Contributor
In einer reinen Konsolenanwendung bist du darauf reduziert was dir Java anbietet dass du mit der Konsole machen kannst. Du kannst mit Java nur Sachen lesen wenn Enter gedrückt wird. Alles weitere geht also logischerweise nur per JNI. Punkt.

(Vielleicht hat das ja schonmal jemand per JNI gemacht - da könntest du mal Sourceforge durchsuchen)
 

foobar

Top Contributor
Das Problem ist, daß die InputStreams blocken d.h. du kannst erst Daten daraus lesen, wenn etwas verfügbar ist. Ohne nativen Code wirste das Problem nicht lösen können. Guck dir mal Den System.in Stream an.
Wofür brauchste das überhaupt?
 

rom4o

Mitglied
Tja nagut ich gebs auf.
Warum stellt auch Java solch eine Routine nicht zur Verfügung.
Naja...danke für die Antworten.

Wofür brauchste das überhaupt?
Siehe Anfang.
Und auf Punktkommentare kann ich gern verzichten, ist dann ne tolle Hilfe.

rom4o
 

quippy

Bekanntes Mitglied
rom4o hat gesagt.:
Warum stellt auch Java solch eine Routine nicht zur Verfügung.

Die Frage kann wohl nur SUN wirklich beantworten. Aber um es vielleicht deutlicher zu machen: das Einlesen einer Taste ist vor allem schon mal sehr Hardwareabhängig. Auf PCs (egal, ob Linux oder Windows) wird am Port 0x60 der Make- und Brake-Code einer gedrückten bzw. losgelassenen Taste angelegt.

Mit dem Bios-Interrupt 0x16 kann man diesen Port ebenfalls auslesen, bzw. dort wird der Hardware-Tastaturpuffer (der als Ringpuffer an die 16 Zeichen (oder so) aufnehmen kann) ausgelesen - man bekommt nur den ASCII-Code der Taste oder alternativ den Status der Modifizierertasten (Shift, CTRL, ALT...)
Hier steht dazu was.

Dies deutet an, daß das Auslesen eines Tastendrucks in erster Linie sehr Hardwarelastig ist. Das bedeutet weiter, daß Java hier auf die OS-Schicht gehen muss, um portabel zu bleiben. Unter Windows >98 (ME) z.B. dürfte Java den Port gar nicht mehr selbst lesen oder den BIOS-Interrupt aufrufen. Das wird unter Linux das gleiche Problem sein - von anderen UNIXen oder SUN OS ganz zu schweigen!

Ergo: es bleibt nur der InputStream an stdin, der auf jedem OS geliefert wird, der leider aber erst dann "flushed", wenn man "enter" gedrückt hat.
 

rom4o

Mitglied
@foobar: Danke für die Seite, wenn ich mal mehr Zeit habe werde ich mich damit näher beschäftigen.
@quippy: Sehr schöne Erklärung, so kann man das gut verstehen, woher weisst du das denn?
An sich stört es ja nicht wenn das Programm in diesem Punkt hardwarenah wird denn ich geh mal davon aus,
dass heut zu Tage jeder PC eine Tastatur hat, und das Programm soll ja nur für standart PC´s sein, nicht für Handys oder irgendwelche SubPC-Systeme.

Aber ich habe wie gesagt keinen Plan wie man JNI benutzt, hab mir
mal was dazu durchgelesen und musste feststellen, dass mir zu kompliziert ist.
Aber vielleicht hat ja jemand das Problem damit schon mal gelöst, dann kann er es ja hier posten :) .

danke

rom4o
 

quippy

Bekanntes Mitglied
rom4o hat gesagt.:
@quippy: Sehr schöne Erklärung, so kann man das gut verstehen, woher weisst du das denn?

Nun, ich bin schon etwa 23 Jahre in der Softwareentwicklung tätig und damals, vor Java, hat man auch in C oder Assembler programmiert. Damals war "PC Intern" von Michael Tischer das Buch für den ambitionierten Coder mit vielen Beispielen in Pascal (Borland Turbo Pascal), C (Borland Turbo C) und Assembler (TASM).
Und wenn man sich dann mal einen eigenen Tastaturtreiber geschrieben hat, dann kann man sich da manchmal noch dran erinnern.

rom4o hat gesagt.:
An sich stört es ja nicht wenn das Programm in diesem Punkt hardwarenah wird denn ich geh mal davon aus,
dass heut zu Tage jeder PC eine Tastatur hat, und das Programm soll ja nur für standart PC´s sein, nicht für Handys oder irgendwelche SubPC-Systeme.

Das ist zwar richtig, aber ich bezweifle mal, daß ein alter Mac das genauso macht, wie ein PC - oder ein AMIGA oder eine SUN Workstation oder was da sonst noch so 'rumfliegt. Ich spreche ja von einer Systemarchitektur, die im alten XT bereits eingesetzt wurde.

Ich bezweifle auch mal, daß eine SUN eine A20 Datenleitung kennt, die man erst öffnen muss, um an den Speicher jenseits der 640 K ran zu kommen ;)
 

Wildcard

Top Contributor
rom4o hat gesagt.:
An sich stört es ja nicht wenn das Programm in diesem Punkt hardwarenah wird denn ich geh mal davon aus,
dass heut zu Tage jeder PC eine Tastatur hat, und das Programm soll ja nur für standart PC´s sein, nicht für Handys oder irgendwelche SubPC-Systeme.
Es geht lediglich darum, das der Aufwand das für alle Plattformen zu implementieren bei weitem den Nutzen übersteigt.
Dieses Feature braucht kein Mensch. Wenn du eine echte 'Konsolen GUI' schreiben willst, dann JCurses, aber wenn es darum geht ob da jetzt steht 'beliebige Taste zum Beenden drücken', oder 'zum Beenden Enter drücken', dann sagen SUN und ich das gleiche:
Scheiß drauf
 

rom4o

Mitglied
Leider wurde wohl nicht genau verstanden, dass
es dabei nicht um Nutzen oder Sinn sondern Machbarkeit geht.
 

Illuvatar

Top Contributor
Um mich mal auf dein Niveau herabzulassen

Du scheinst hier der zu sein, der es nicht schnallt:
Es ist in reinem Java nicht machbar, nur per JNI, wenn du das schaffen willst wirst du dich wohl erstmal einige Tage einarbeiten müssen, wenn das plattformunabhängig sein soll, wirds noch viel komplizierter.
Das ist alles was es dazu zu sagen gibt, daran kannst du nichts ändern wenn du hier noch länger rumnölst. Wenn du versuchst das selber zu implementieren, stell eine konkrete Frage, da wird dir sicher geholfen.
Was wir versuchen dir mitzuteilen ist, dass es nicht viel Sinn hat. Es geht immer um den Sinn, warum sollten wir über etwas sinnloses reden? Wenn du dir selber in Awt/Swing eine Konsolen-UI schreibst und die Streams darauf umleitest, ist das hundertmal einfacher als da was mit der Konsole zu machen, auf die du keinen Einfluss hast.
 
G

Guest

Gast
Manoman ihr geht ja ganzschön aggressiv miteinander um.
Das geht doch auch anders
:D
 
G

Gast

Gast
i finds auch lustig :)
in anderen foren müsst es auch ma so zugehen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Programm durch Tastendruck beenden Allgemeine Java-Themen 4
E programm im background tastendruck abfangen Allgemeine Java-Themen 4
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben