Date July 02, 2013
Tags java
Share このエントリーをはてなブックマークに追加

BufferedReader.readline()ってスレッドをブロックするから途中で処理やめることできなくて嫌だよね、って話がグループ内で話題になったので調べてみると、BufferedReader.ready()でI/O待ちするかどうかを判断できることを知ったのでとりあえずサンプルコード。

タイムアウトを10秒に設定して入力待ち。

例外処理なんかは適当に。

public static void main(String[] args) throws IOException, InterruptedException{
    BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
    String str = "timeout";
    Calendar end = Calendar.getInstance();
    end.add(Calendar.SECOND, 10);
    while(Calendar.getInstance().before(end)){
        if(r.ready()){
            str = r.readLine();
            break;
        }
        Thread.sleep(1);
    }
    System.out.println(str);
}

参考: [JavaSpecialists 153] - Timeout on Console Input

記事のタイトルは日本語よりも英語のほうが見栄えがいいみたい。フォントの問題だろうけど、細かく見る気力なし。


Comments

comments powered by Disqus