1

私はJavaの初心者で、このタイマーの問題を3〜4時間解決しようとしています。インターネットでほぼすべてを試しました。

問題は、プログラムがユーザーに何かを入力して新しいゲームを開始するか、10 秒待つかを選択できるようにする必要があることです。これにより、ユーザーはメニューにリダイレクトされます。

これは私のコードがどのように見えるかです:

long startTime = System.currentTimeMillis();
long maxDurationInMilliseconds = 10000;

while (System.currentTimeMillis() < startTime + maxDurationInMilliseconds) {
Scanner end = new Scanner (System.in);
System.out.println("Enter anything if you want to start a new game or wait 10 seconds and you will be redirected to the Menu");
    String value;
    value = end.nextLine();

    if (value != null) {
        playGame();
    }

    else if (System.currentTimeMillis() > startTime + maxDurationInMilliseconds) {
    // stop running early
         showMainMenu();
    break;
}

}

しかし、何らかの理由でそれを機能させることができず、これを機能させるのに苦労しており、stackoverflow が私の最後のチャンスです。

編集:返信ありがとうございます。まだ直っていません。頭痛がして午前 3 時 31 分です。

4

2 に答える 2

1

使用 TimerTask( http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html ):

public class MyClass {
    private static final int TEN_SECONDS = 10000;
    private String userInput = "";

    TimerTask timerTask = new TimerTask(){
        public void run() {
            if(userInput.equals(""))
                showMainMenu();
        }
    };

    public void getInput() throws Exception {
        Timer timer = new Timer();
        timer.schedule(timerTask, TEN_SECONDS);

        System.out.println("Press any key or wait 10 seconds to be redirected to the Menu.");
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        userInput = in.readLine();

        timer.cancel();
        if (!userInput.equals(""))
            playGame();
    }

    public static void main(String[] args) {
        try {
            (new MyClass()).getInput();
        } catch( Exception e ){
            System.out.println(e.getMessage());
        }
    }
}
于 2013-10-21T00:59:38.913 に答える
0
//make this booean part of the class and not function
Boolean isStopped = false;    

System.out.println("Enter anything to start new game.");
Scanner end = new Scanner (System.in);

final Thread startThread = new Thread(new Runnable(){
    public void run(){
        try{
            Thread.sleep(10000);
            if(!isStopped)
                showMenu();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
});
final Thread inputThread = new Thread(new Runnable(){
    public void run(){
        end.nextLine();
        isStopped = true;
        startGame();
    }
});
inputThread.start();
startThread.start();
于 2013-10-21T01:08:20.720 に答える