zur Zeit programmiere ich ein wenig herum, um es zu lernen. Als kleines Projekt habe ich mir einen sehr einfachen MP3-Player ausgesucht, der über die Kommandozeile funktionieren soll. Das ganze funktioniert, dank einiger Bibliotheken, auch recht gut – doch jetzt stehe ich vor einem kleinen Problem.
Nachdem die Musik, über eine Abfrage, ausgewählt wurde, werden die Songs als Objekte in er ArrayList angelegt und in einer Schleife ausgegeben – so weit, so gut. Doch jetzt möchte ich es ermöglichen per Eingabe zurück und vor zu spulen, das ganze abzubrechen oder zu pausieren. Diese einzelnen Teile sind ebenfalls programmiertechnisch kein Problem – nur der Zwischenschritt bereitet mir Kopfzerbrechen. Wie kann ich untersuchen, ob der User etwas eingibt, beziehungsweise nichts eingibt?
Algorithmus:
i = 0
Für alle Musikdateien
Falls keine Eingabe spiele Musik ab und erhöhe i um 1
Falls Eigabe
Falls Eingabe =“Nochmal abspielen“ verringere i um 1
Falls Eingabe =“Überspringen“ verringere i nochmal um 1
Falls Eingabe =“Pause“ tue nichts, bis Eingabe = „Keine Pause mehr“
Falls Eingabe =“Ende“ brich Schleife ab
Bislang bin ich jedoch nur so weit, da ich nicht weiss, wie man eine Eingabe optional gestalten kann.
weißt du grundsätzlich von einer Eingabe in Java?
im Konsole etwas begrenzt auf ganze Zeilen mit Enter-Taste, soll ‘Nochmal abspielen’ komplett eingetippt werden?
in GUI mit Key Bindings KeyListener leichter einzelne Tasten,
jedenfalls ist Trennung der Aufgaben in Threads zu bedenken, ein Thread verwaltet die Dauerschleife an Musik und Kontrolle der fertigen Eingabe,
ein anderer kümmert sich nebenher um die Eingabe, legt sie in eine Liste von Kommandos ab, oder nur das neueste merken,
mit einer GUI und Eingabekontrolle dort wäre das automatisch separat
wie gesagt bin ich blutiger Anfaenger. Von Threads habe ich noch nie gehoert, hier werde ich mich mal einlesen. Vielen Dank fuer den Link.
weißt du grundsätzlich von einer Eingabe in Java?
Das ist gerade das Problem, wahrscheinlich habe ich es nicht verstaendlich genug ausgedrueck, ich weiss nicht ob der User etwas eingibt oder nicht.
Wenn auf jeden Fall etwas eingegeben werden muss, koennte ich ja pruefen ob die Eingabe leer ist, und einen Inhalt hat - allerdings waere dies bei einer Playliste, bei der man nie etwas aendern moechte auf Dauer etwas nervig, wenn man nach jedem Lieder Enter druecken muss.
Soll ‚Nochmal abspielen‘ komplett eingetippt werden?
Ich dachte eigentlich an Vollstaendige Saetze.
Mit einer GUI und Eingabekontrolle dort wäre das automatisch separat
Ich hoffe ich verstehe Dich richtig, wenn ich anstatt auf die Eingabe in der Konsole, das ganze ueber ein TextField loesen wuerde, dass einen ActionListener besitzt, wuerde sich mein Problem quasi von selbst loesen?
Mit einer GUI und Eingabekontrolle dort wäre das automatisch separat
ein Teil des Problems, ein Extra-Thread für die Eingabe, würde wegfallen, vielleicht 15% Komplexität
dazu Eingabe an sich ganz anders, je nachdem ob GUI schon bekannt/ aktuell interessant vielleicht nicht zu rechtfertigen
Problem dabei: wenn Java auf Konsole wartet, dann passiert so lange nix, keine Musik weiter,
deswegen verschiedene Threads nötig, was ein relativ komplexes Konzept ist, allerdings Musik abspielen selber auch nicht ohne…
(habe ich noch nie gemacht, kann natürlich letztlich auch nur kopierter Aufruf von API sein),
viele Dinge auf einmal zu bedenken
So genau kenne ich mich in Java nicht aus, vielleicht gibt es schon ein Framework, in dem Streams direkt durchgehen, ohne Enter zu drücken. Mit Bordmitteln aber nicht.
Vielleicht weiß da ein Anderer mehr.
die mehrfach genannten Threads? einer darf ruhig ständig auf die Eingabe warten,
ein anderer kümmert sich die ganze Zeit um die Musik
dass von der Konsole keine einzelnen Tasten, sondern nur ganze Zeilen nach Enter gelesen werden können, ist eine andere Frage,
ob in C besser, wer weiß,
wie reagieren dort Programme auf Eingaben, wenn man in Konsole erst HALO eintippt, ein Zeichen löscht auf HAL, dann zu HALLO weiterschreibt,
dann vielleicht mit Pfeilttaste zurück, im Overwrite-Modus mit einem E den Text zu HELLO ändert und am Ende alles mit Enter absendet?
die Verarbeitung dazu zeichenweise möchte ich sehen
da lohnt sich doch eher ganze Zeilen einzulesen, hoffentlich ist umschaltbar beides möglich wie auch in GUIs:
für einzelne Zeichen/ Kommandos KeyListener/ KeyBindings,
für komplette Eingaben aber lieber ein Textfeld befüllen lassen und am Ende nachschauen was drinsteht