Scanner nach bestimmter Zeit überspringen

PyroNjan

Mitglied
Ich versuche gerade mit Hilfe von
Java:
 import java.util.Scanner;
einen regelmäßigen Consolen Input zu lesen. Ich verwende dabei eine if Fall.
ich möchte dass das Programm bei bestimmten Eingaben befehle ausführt dabei aber nicht das Programm pausiert.
Java:
boolean gameon=true;
Scanner sc=new Scanner(System.in);
if(sc.next().equals("q"))
{
     gameon=false;
}
so die Idee allerdings wartet das Programm jetzt solange bis ich einen Konsolen Input gebe.
 

Robat

Top Contributor
Wenn du das Programm nicht pausieren lassen willst, wirst du wohl um Threads nicht herum kommen und die Eingabe in einem anderen Thread laufen lassen.
 

Robat

Top Contributor
Hast du dich denn schon mal über threads belesen? Da gibt's tausende Beispiele.. Sicherlich auch eins was genau auf deine. Bedürfnisse zugeschnitten ist.
 

PyroNjan

Mitglied
Was hast du denn genau vor?
Im Endeffekt versuche ich zur Zeit in BlueJ Minesweeper zu schreiben, da ich mich aber noch nicht mit einer richtigen GUI auseinander setzen möchte, regel ich den Out- und Input noch über die Konsole. Die Erstellung und Darstellung des Feldes Funktioniert einwandfrei. Die Darstellung der Zeit auch und nach jeder Sekunde wird die Konsole gecleart und ein aktualisiertes Spielfeld ausgegeben. Letztendlich fehlt nur noch die Steuerung über die Konsolen Inputs, jedoch bleibt das Spiel stehen und wartet auf den Konsolen Input
 

SchwarzWeiß

Bekanntes Mitglied
Kannst du nicht einfach nach jedem Input das Spielfeld aktualisieren und in der Konsole ausgeben? Mit Minesweeper kenne ich mich nicht aus, ich habe immer Pinball gespielt ;)
 

PyroNjan

Mitglied
Ok danke erstmal für. Input und paralleles Laufen klappt nur verstehe ich nicht warum er den Thread nicht beendet. :(
Java:
public class CORE
{
    THREAD1 T1;
    THREAD2 T2;
    public CORE()
    {
        T1 = new THREAD1( "Printer");
        T1.start();

        T2 = new THREAD2( "Scanner", this);
        T2.start();
    }  
  
    public void StopThread1()
    {
        T1.on=false;
    }
  
    public void GetNewThread2()
    {
        T2 = new THREAD2( "Scanner", this);
        T2.start();
    }
}

import java.lang.*;
import java.util.Scanner;
class THREAD2 implements Runnable
{
    private Thread t;
    private String threadName;
    Scanner sc=new Scanner(System.in);
    CORE c1;
    THREAD2(String name, CORE core)
    {
        threadName = name;
        System.out.println("Creating " + threadName);
        c1=core;
    }

    public void run()
    {
        if(sc.next().equals("q"))
        {
            c1.StopThread1();
        }
    }

    public void start()
    {
        System.out.println("Starting " + threadName);
        if (t==null)
        {
            t=new Thread (this, threadName);
            t.start();
        }
    }
}

class THREAD1 implements Runnable
{
    public Thread t;
    private String threadName;
    int zeit=0;
    boolean on;
    THREAD1(String name)
    {
        threadName = name;
        System.out.println("Creating " + threadName);
    }

    public void run()
    {
        System.out.println("Running " +  threadName );
        zeit=0;
        on=true;
        try
        {
            while(on)
            {
                System.out.println("|-|");
                System.out.println(zeit);
                Thread.sleep(1000);
                zeit++;
                System.out.println("\f");
            }
        } catch (InterruptedException e) {
            System.out.println("Thread " +  threadName + " interrupted.");
        }
        System.out.println("Thread " +  threadName + " exiting.");

    }

    public void start()
    {
        System.out.println("Starting " + threadName);
        if (t==null)
        {
            t=new Thread (this, threadName);
            t.start();
        }
    }
}
So hab ich das jetzt mal umgesetzt was auf der Seite stand bzw so wie ich das verstanden habe: https://www.tutorialspoint.com/java/java_multithreading.htm
damit es in etwa zu meinem Programm passt aber wenn ich das jetzt so starte in dem ich ein CORE erstelle kann ich auch "q" eintippen und das Programm reagiert drauf aber es beendet THREAD1 nicht so wie ich das erwartet hätte.
 

Ähnliche Java Themen

Neue Themen


Oben