Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux上的java-必须按CtrlD两次_Java_Linux - Fatal编程技术网

linux上的java-必须按CtrlD两次

linux上的java-必须按CtrlD两次,java,linux,Java,Linux,这是我为从标准输入读取用户输入而编写的代码。这段代码被提取为playinport.jar 我已经编写了一个脚本play来运行这个jar。但是,在终端(linux)中运行/play并完成不包含enter的输入后,我必须按两次Ctrl+D,才能将输入打印出来 当我运行另一个名为check的脚本时,也出现了同样的问题,该脚本只需调用/play,并通过stdin发送一些输入。在我运行/check之后,它就挂在那里,无法打印输入 有人能帮忙解决这个问题吗?谢谢:)这就是Linux终端的工作原理。它与Jav

这是我为从标准输入读取用户输入而编写的代码。这段代码被提取为
playinport.jar
我已经编写了一个脚本
play
来运行这个jar。但是,在终端(linux)中运行
/play
并完成不包含enter的输入后,我必须按两次
Ctrl+D
,才能将输入打印出来

当我运行另一个名为
check
的脚本时,也出现了同样的问题,该脚本只需调用
/play
,并通过
stdin
发送一些输入。在我运行
/check
之后,它就挂在那里,无法打印输入


有人能帮忙解决这个问题吗?谢谢:)

这就是Linux终端的工作原理。它与Java代码无关

如果您使用类似于
cat>textfile
的命令进行测试,您会发现,除非您位于行的开头,
^D
不会像您预期的那样立即结束文件。(我不知道这种行为的所有细节,但这就是要点。)

Linux的惯例是文本文件总是以换行符结尾。如果你不遵守惯例,你可能会遇到这样的问题


但是,我不确定您在使用重定向发送数据时程序挂起的问题。这一部分对我来说更令人惊讶,因为它不是交互式的,所以终端行为不应该成为问题。

我通过“java-cp…/bin snippet.snippet”和“java-jar snippet.jar”以及“/play”运行了您的代码。两个都很好(只需要一个^D)。[使用oracle java sdk 1.7.051、ubuntu 12.04.4、bash shell]这就是java的工作原理,谢谢!最后我找到了解决办法。./check运行的脚本是在Scheme中编写的,输入流机制不同于Java。我通过在Java的InputStream中使用available()方法解决了这个问题。
String str = "";
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
int tempint = 0;
try {
    //The program cannot get out from this while loop!
    while((tempint = bfr.read()) != -1){
        str += Character.toString((char)tempint);
    }
}
catch(IOException ioe) {
    System.out.println(ioe);
}
//Print the input
System.out.println(str);