Timer trotz erwartender Eingabe durchlaufen lassen

Diskutiere Timer trotz erwartender Eingabe durchlaufen lassen im Java Basics - Anfänger-Themen Bereich.
E

Exolution

Schönen guten Abend wünsche ich euch allen,

im Neuland nenne ich mich Exolution und habe vor kurzem damit begonnen, mich mit der Programmierung richtig auseinanderzusetzen.

Ich bin dezeit an einem Spiel dran und habe das Problem, dass mein Timer leider nicht bis zur run-Methode kommt, da eine Eingabe dazwischenfunkt.
Leider ist die offene Eingabe unausweichlich, weshalb ich euch gerne fragen würde, ob und wie man die offene Eingabe überbrücken könnte?


Nachfolgend der Code, der mein Problem widerspiegelt:

Java:
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class testumgebung {
    
    static String nachricht = "";

    public static void main(String[] args) {
        home();
    }
    
    public static void home() {
        Scanner eingabefeld = new Scanner(System.in);
        nachricht();
        String eingabe = eingabefeld.nextLine();
        switch (eingabe) {
        case "1":
            anderenachricht();
            break;
        default: 
            
            break;
        }
    }
    
    public static void anderenachricht() {
        Timer timer = new Timer();
        
        nachricht = "Da bin ich!";
        home();
        
        timer.schedule(new TimerTask() {
            public void run() {
                nachricht = "";
                home();
                timer.cancel();
            }
        }, 2500);
        
    }

    public static void nachricht() {
        System.out.println("Nachricht:\n" + testumgebung.nachricht);
    }
    
}
Die vorhandene Eingabe ist deshalb so wichtig, da in meinem Spiel, während der Timer läuft, weiter die Steuerung aktiv sein muss, die ich mithilfe der Eingabe realisiert habe. Die Timer im Spiel laufen natürlich länger als 2,5 Sekunde (Zwischen 1-10 Minuten).


Ich bedanke mich für das entgegenbringende Interesse für mein Problem und wünsche einen ruhigen Abend.
 
mihe7

mihe7

Ich verstehe das Problem ehrlich gesagt nicht ganz: Du musst doch lediglich den home()-Aufruf ans Ende der Methode anderenachricht() stellen, damit der Timer vorher noch gestartet wird.
 
E

Exolution

Nabend mihe7,

die Lage sieht wie folgt aus: Man soll bereits das leere Nachrichtenfeld sehen, und sobald die Methode anderenachricht() ausgeführt wird, das Nachrichtenfeld mit der Nachricht für 2,5 Sekunden "ersetzen" und danach verschwinden.


Schönen Abend wünsche ich dir.
 
mihe7

mihe7

Schönen Abend auch, dazu brauchst Du doch nur die Nachricht zu schreiben, 2,5 s zu warten (Thread.sleep()) und dann weitermachen.
 
E

Exolution

Anfangs hatte ich es mit Thread.sleep() probiert, jedoch kann man während den 2,5 Sekunden keine Eingabe tätigen.

Ich hatte bereits die Idee, eine eigene Methode für die Eingabe zu schreiben, die ich dann jedes Mal dahinterklemme, kann ich aber erst morgen ausprobieren.
 
mihe7

mihe7

Ich fasse mal zusammen: Du willst eine Eingabe auf der Konsole haben, parallel dazu möchtest Du irgendwelche Ausgaben tätigen, die sich aber nicht mit Eingaben überschneiden sollen, obwohl die Eingabe weiterhin möglich sein soll? Das geht auf der Konsole im Allgemeinen nicht.
 
E

Exolution

Hallo mihe7,
entschuldige meine späte Antwort, hatte erst jetzt die Gelegenheit vorbei zu schauen.

Schade, hatte mein Programm darauf ausgelegt, dass es so funktionieren soll. Da muss ich mir wohl was anderes einfallen lassen.

Ich danke dir dennoch für deine Bemühung.
 
E

Exolution

Ich bin absoluter Neueinsteiger und habe mein Programm für die Konsole optimiert.
Mit der Konsole sehe ich sofort, wie sich etwas im Quellcode auswirkt und habe dabei zeitgleich eine "Benutzeroberfläche". Beispielsweise besteht mein "Design" aus Strichen, Slash, Backslash etc.. welche mit System.out.println ausgegeben werden.
 
mihe7

mihe7

OK, in dem Fall wirst Du damit leben müssen, dass Ein- und Ausgabe "kollidieren" können. Alternativ könntest Du auch nur die Hinweise über das GUI anzeigen, z. B. JOptionPane.showMessageDialog(null, "Hinweis"); kannst Du mal testhalber einbauen, ob Dir das was bringen würde.
 
E

Exolution

Guten Morgen mihe7,

JOptionPane.showMessageDialog(null, "Hinweis"); kann ich leider nicht verwenden, da ich nur eine kleine Leiste erzeugen wollte, wo sich der Status jede 2,5 Sekunden resetet (Das halt in der Konsole). Generell hatte ich auch vor, dass sich ein Gegner im Spiel mit dem Timer zufällig generiert, aber da Eingaben eine Pause erzwingen, muss ich anders an die Sache rangehen.

Ich werde mal schauen, wie ich da jetzt weitermachen kann. Danke für deine Hilfe. :)
 
mihe7

mihe7

Generell hatte ich auch vor, dass sich ein Gegner im Spiel mit dem Timer zufällig generiert, aber da Eingaben eine Pause erzwingen, muss ich anders an die Sache rangehen.
Du kannst schon Dinge im Hintergrund ausführen, das ist kein Problem, nur parallel Aus- und Eingabe geht auf der Konsole im Allgemeinen nicht. Zum Beispiel kannst Du unter Linux (fast) immer in die Konsole tippen, wenn eine GUI im Vordergrund läuft. Es gibt natürlich Möglichkeiten, die sind aber plattformabhängig und benötigen zusätzliche Libs wie z. B. ncurses (das ist eine native Library, also nicht direkt unter Java verwendbar). Für Java scheint mir https://github.com/mabe02/lanterna ein Ansatz zu sein oder auch https://sourceforge.net/projects/charva/ - dazu kann ich Dir aber nichts Näheres sagen.
 
Thema: 

Timer trotz erwartender Eingabe durchlaufen lassen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben