Funktion in Hintergrund und Vordergrund ausführen

Helix86

Mitglied
Hallo zusammen,
ich schreibe gerade ein kleines Programm und stehe vor folgender Herausforderung:

Ich möchte das ein Benutzer eine Eingabe innerhalb einer gewissen Zeit macht.
Gedacht hatte ich mir das als Kombination einer "read()" im Hintergrund und einer "wait()" im Vordergrund aber ich finde leider auch nichts dazu im Netz.
Wäre es ein Bash Skript würde ich nun zu Vorder- und Hintergrund greifen, aber gibt es das in Java ?

Meine Funktionen sehen so aus:

Java:
//Eingabe für Integer:
      public static int read(){
          int ret=0;
          try{
              input = new Scanner(System.in);
              ret=input.nextInt();
          } catch (java.util.InputMismatchException ex) {
              System.out.println("$Gib eine Int Zahl ein ...");
          }
          return ret;
      }

  //Warte 5 Sekunden
      public static void wait(){
            try {
            Thread.sleep(5*1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      }

Kann mir da jemand eine Anregung geben wie ich das hin bekommen kann ?
(public static weil aufgeteilt in Molule und Packages..)

Vielen lieben Dank.

Felix
 
Zuletzt bearbeitet von einem Moderator:

VfL_Freak

Top Contributor
Moin,

was genau soll das "wait" denn bezwecken? Die "read"-Methode beenden ???
Welchen thread willst Du damit anhalten?

Gruß
Klaus
 

kaoZ

Top Contributor
Das Problem ist unter anderem auch das der Scanner / der Thread in welchem er läuft , blockierend auf einen Eingabe wartet.

Du müsstest also einen Service schreiben der nicht nur einen counter startet und wieder killt, sonder auch den aktiven Thread in welchem der Scanner läuft killt.

Dazu müssten unter anderem beide Threads zeitgleich gestartet werden, und also dementsprechend parallel laufen ( parallelisiert )
 
Zuletzt bearbeitet:

Helix86

Mitglied
Vielen Dank für die Antworten!

Der der wait() und der read() sollen aber gemeinsam gestartet werden und wenn wait() abläuft dann bricht auch read() ab und "keine Antwort ist auch eine Antwort" quasi.

Parallelisiert klingt gut, sagt mir aber nichts.
Wie genau geht das ? Kannst du mir ein Tutorial o.ä. empfehlen ?
 
Zuletzt bearbeitet:

Helix86

Mitglied
Danke für die Links!

Ich hab jetzt versucht das ganze umzusetzen aber i-wie mag es nicht so richtig.
Mein Problem dabei ist auf den Punkt gebracht:

Die read() erwartet ja auf Eingabe und ist damit nicht ohne weiteres abbrechbar oder ?

Wenn ich an C denke dann ist meine Read eher wie ein scanf und was ich hier bräuchte ist eher etwas wie getchar...

Hat mir jemand vielleicht ein paar Anregungen ?
Vielen Dank und eine besinnliche Adventszeit an alle Leser :)
 
Zuletzt bearbeitet:

Helix86

Mitglied
Also so sieht mein Versuch aus, aber wenn das read() halt ewig wartet... geht nix

Java:
import java.util.Scanner;


public class MyThread extends Thread {
	public static final int FIVE_SECONDS = 5*10000;
	public volatile boolean finished = false;
	private static int intInput=0;

	public static int getIntInput() {
		return intInput;
	}

	public void setIntInput(int testPriInt) {
		MyThread.intInput = testPriInt;
	}

	public void run() {
		while(true){
			if (finished) {
				break;
			}
			setIntInput(read());
		}
	}

	public static int read() {
		int ret = 0;
		try {
			ret = new Scanner(System.in).nextInt();
		} catch (java.util.InputMismatchException ex) {
			System.out.println("$Gib eine Int Zahl ein ...");
		}
		return ret;
	}

	public static void main(String[] args) {
		MyThread myThead = new MyThread();
		myThead.start();
		try {
			Thread.sleep(FIVE_SECONDS);
		} catch (InterruptedException e) {
		}
		myThead.finished = true;
		if (getIntInput()!=0) {	
			System.out.println("Sie haben: "+ getIntInput()+ " eingegeben");
		} else {
			System.out.println("Sie haben: nix eingegeben");
		}
	}
}

Und jetzt bitte nicht auf das !=0 fixieren (hier: Eingabe=0 --> keine Eingabe),
das ist nur zum Test erst mal.
 
Zuletzt bearbeitet:

PissPain

Aktives Mitglied
Soll es so sein, dass innerhalb von 5 Sekunden eine Eingabe aufgenommen wird und nach diesen 5 Sekunden die Eingabe ausgegeben werden soll? Oder innerhalb von 5 Sekunden direkt nach dem Eingeben ausgeben? Habe das nicht ganz verstanden.
 

PissPain

Aktives Mitglied
Falls du mal mein Ergebnis sehen willst:
Java:
public class Main {
	public static void main(String[] args) {
		try(InputStream inputStream = System.in) {
			long thisTime, lastTime = System.currentTimeMillis();
			float time = 0;
			while(true) {
				thisTime = System.currentTimeMillis();
				time += (float) (thisTime - lastTime) / 1000f; //Vergangene Zeit
				lastTime = thisTime;
				
				if(time >= 5) //Nichts eingegeben - nach 5 Sekunden
					break;
				
				if(inputStream.available() > 0) {
					byte[] bytes = new byte[inputStream.available()];
					
					for(int i = 0; i < bytes.length; i++)
						bytes[i] = (byte) inputStream.read();
					
					System.out.println(new String(bytes));
					
					break;
				}
				
				Thread.sleep(30); //PC entlassten
			}
		} catch (IOException | InterruptedException e) {
			e.printStackTrace();
		}
	}
}

Durch diese "Zeit" sind diese 5 Sekunden genauer und sowieso besser, da man ja nicht wissen kann, wie lange der PC braucht. Ich habe das ähnlich wie in einem Game-loop gemacht, aber das ist ja egal, hauptsache du hast die vergangene Zeit. Und damit beim "Scannen" nichts stehen bleibt, wenn man nichts eingibt, überprüft man ob die Anzahl der Bytes größer als 0 ist. Und wenn sie dann größer als 0 ist, weiß man, dass was eingegeben wurde.

Ich bin mir sicher, falls das nicht dein Ziel war, dass man diesen Code zum Gewollten umformen kann.
 
Zuletzt bearbeitet:

Helix86

Mitglied
Vielen Dank für die Antworten! Gerade die "Futures" sind coole Wrapper für asynchrones scheint mir, werde ich mir merken ;)

ich hab es jetzt so in den Griff bekommen, nicht schön aber selten...

Java:
         //jeweils mit gettern&settern:
	private static boolean run1 = true; 
	private static String string = null;


        // Counter
	public static void counter() {
		System.out.println("# bitte beliebige Taste druecken");
		System.out.println("# Keine Eingabe --> Alarm");
		int ablauf = 30;

		Thread thr1 = new Thread(r1);
		Thread thr2 = new Thread(r2);
		// Starte Thread 1
		thr1.start();

		// Starte Thread 2
		thr2.start();

		// Während Thread 2 noch "lebt" also die eingestellte Zeit
		while (thr2.isAlive()) {
			if(string!=null){ //Wenn Eingabe
				thr2.interrupt();
				break;
			}
			System.out.println(ablauf); // Countdown in der console
			ablauf--;
			
			try {
				Thread.sleep(1000l);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		if (!thr2.isAlive()) {
			thr1.interrupt();
			//System.out.println("thr2 ist eben gestorben");
		}
		if (string == null) {
			alarm();
		} else {
                //hier gehts dann weiter mit dem Programm wenn eine Taste gedrückt wurde
		}
	}

	public static Runnable r1 = new Runnable() {
		public void run() {
			while (getRun1()) {
				try {
					string = Integer.toString(System.in.read());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	};

	public static Runnable r2 = new Runnable() {
		public void run() {
			try {
				Thread.sleep(30 * 1000L);
			} catch (InterruptedException iex) {
			}
		}
	};

Denke close, Danke Leute!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
shiroX OOP Java Funktion implementieren Java Basics - Anfänger-Themen 3
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
F Funktion immer zur vollen Stunde? Java Basics - Anfänger-Themen 3
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
C Meine erste Funktion Java Basics - Anfänger-Themen 12
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
G OOP Aus Objekt auf Funktion der erzeuger Klasse zugreifen? Java Basics - Anfänger-Themen 11
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
M Interface als Konstruktorparameter nutzen, um Funktion zu plotten Java Basics - Anfänger-Themen 14
NR_EIGHT Benutzereingabe in Funktion verpacken Java Basics - Anfänger-Themen 4
J Funktion definieren und ausfuehren Java Basics - Anfänger-Themen 27
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
N mathematische Funktion Java Basics - Anfänger-Themen 29
R Programm verstehen, Funktion Java Basics - Anfänger-Themen 4
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
O Nicht Standard Form boolesche Funktion in Standard Form parsen Java Basics - Anfänger-Themen 3
F Sleep Funktion Java Basics - Anfänger-Themen 12
S Euklid Funktion Java Basics - Anfänger-Themen 8
H Funktion mit Argumenten Java Basics - Anfänger-Themen 5
Q Random Funktion JButtons Java Basics - Anfänger-Themen 6
O Probleme mit der repaint-Funktion Java Basics - Anfänger-Themen 6
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
C Probleme mit replaceAll Funktion Java Basics - Anfänger-Themen 9
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben