Scanner引数に、普通のファイルストリームじゃなくて、

Scanner sc = new Scaner(System.in)
str = sc.next();
sc.close();

の様に、標準入力を指定した場合、
正常に動かないようなのですが、これはどういう理由によるものでしょうか。

ファイルの場合だと、上記は普通に成功します。