Hallo Freunde,
ich versuche in meinen Programm nicht auf der Input von User zu warten, wenn er in eine bestimmte Zeit reagiert dann sollte seine Input gespeichert werden,ansonst soll das Programm weiterlaufen
Ich habe versucht das Problem mit Hilfe Timern aus der Klasse java.util.Timer zu lösen, leider habe das Problem, das der Scanner nur einmal scheinbar ausgeführt wird. da durch bleibt der Wert der Input immer gleich.
Hier ist mein Code:
[CODE lang="java" title="Timer"]package squirrelGameCore;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
String lastinput="leer";
@Override
public void run() {
System.out.println("render() started at:"+new Date());
System.out.println("update() started at:"+new Date());
completeTask();
System.out.println("input:--------"+ lastinput +"--------- at"+new Date());
}
private void completeTask() {
try {
Thread.sleep(2000);
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
lastinput=sc.next();
break;
}
sc.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]){
TimerTask timerTask = new MyTimerTask();
//running timer task as daemon thread
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(timerTask, 0, 2*1000);
System.out.println("TimerTask started");
//cancel after sometime
try {
Thread.sleep(120000);
} catch (InterruptedException e) {
e.printStackTrace();
}
timer.cancel();
System.out.println("TimerTask cancelled");
}
}[/CODE]
Hier ist das output:
[CODE title="Output"]TimerTask started
render() started at:Sat Apr 24 17:27:04 CEST 2021
update() started at:Sat Apr 24 17:27:04 CEST 2021
right
input:--------right--------- atSat Apr 24 17:27:12 CEST 2021
render() started at:Sat Apr 24 17:27:12 CEST 2021
update() started at:Sat Apr 24 17:27:12 CEST 2021
input:--------right--------- atSat Apr 24 17:27:14 CEST 2021
render() started at:Sat Apr 24 17:27:14 CEST 2021
update() started at:Sat Apr 24 17:27:14 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:16 CEST 2021
render() started at:Sat Apr 24 17:27:16 CEST 2021
update() started at:Sat Apr 24 17:27:16 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:18 CEST 2021
render() started at:Sat Apr 24 17:27:18 CEST 2021
update() started at:Sat Apr 24 17:27:18 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:20 CEST 2021
render() started at:Sat Apr 24 17:27:20 CEST 2021
update() started at:Sat Apr 24 17:27:20 CEST 2021[/CODE]
Habt ihr eine Idee wie man sowas machen kann
Danke im Voraus
ich versuche in meinen Programm nicht auf der Input von User zu warten, wenn er in eine bestimmte Zeit reagiert dann sollte seine Input gespeichert werden,ansonst soll das Programm weiterlaufen
Ich habe versucht das Problem mit Hilfe Timern aus der Klasse java.util.Timer zu lösen, leider habe das Problem, das der Scanner nur einmal scheinbar ausgeführt wird. da durch bleibt der Wert der Input immer gleich.
Hier ist mein Code:
[CODE lang="java" title="Timer"]package squirrelGameCore;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
String lastinput="leer";
@Override
public void run() {
System.out.println("render() started at:"+new Date());
System.out.println("update() started at:"+new Date());
completeTask();
System.out.println("input:--------"+ lastinput +"--------- at"+new Date());
}
private void completeTask() {
try {
Thread.sleep(2000);
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
lastinput=sc.next();
break;
}
sc.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]){
TimerTask timerTask = new MyTimerTask();
//running timer task as daemon thread
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(timerTask, 0, 2*1000);
System.out.println("TimerTask started");
//cancel after sometime
try {
Thread.sleep(120000);
} catch (InterruptedException e) {
e.printStackTrace();
}
timer.cancel();
System.out.println("TimerTask cancelled");
}
}[/CODE]
Hier ist das output:
[CODE title="Output"]TimerTask started
render() started at:Sat Apr 24 17:27:04 CEST 2021
update() started at:Sat Apr 24 17:27:04 CEST 2021
right
input:--------right--------- atSat Apr 24 17:27:12 CEST 2021
render() started at:Sat Apr 24 17:27:12 CEST 2021
update() started at:Sat Apr 24 17:27:12 CEST 2021
input:--------right--------- atSat Apr 24 17:27:14 CEST 2021
render() started at:Sat Apr 24 17:27:14 CEST 2021
update() started at:Sat Apr 24 17:27:14 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:16 CEST 2021
render() started at:Sat Apr 24 17:27:16 CEST 2021
update() started at:Sat Apr 24 17:27:16 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:18 CEST 2021
render() started at:Sat Apr 24 17:27:18 CEST 2021
update() started at:Sat Apr 24 17:27:18 CEST 2021
up
input:--------right--------- atSat Apr 24 17:27:20 CEST 2021
render() started at:Sat Apr 24 17:27:20 CEST 2021
update() started at:Sat Apr 24 17:27:20 CEST 2021[/CODE]
Habt ihr eine Idee wie man sowas machen kann
Danke im Voraus