Re: Why does this only work when I am running a shellscript
On 30/03/13 14:54, Barb Knox wrote:
In article <8738vdmg0h.fsf@Servus.decebal.nl>,
Cecil Westerhof <Cecil@decebal.nl> wrote:
I have the following code:
private static void doCommand(final String cmd) throws IOException {
Process p;
Scanner sc;
System.out.println("#" + cmd + "#");
p = Runtime.getRuntime().exec(cmd);
sc = new Scanner(p.getInputStream());
while (sc.hasNext()) {
System.out.println(sc.nextLine());
}
}
When I use something like:
/usr/bin/convert ?
It hangs.
I have not tested this, but I expect the Scanner is blocking waiting for
input. You might want to try while (sc.hasNextLine()).
It's probably good advice anyway, but I don't think it makes much
difference in this case. hasNext() tests for the next 'token', using a
whitespace separator by default. This means that it will block while
there are only blank lines on the unclosed input. The next non-blank
line will unblock it, then each of the pending blank lines will be read,
while hasNext() remains true (because the next token is still not
consumed). Blank lines followed by EOF will be skipped, however.
I tested with the following program:
import java.io.*;
import java.util.*;
public class Scan {
public static void main(String[] args) throws Exception {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
String l = s.nextLine();
System.out.printf("Next line: %s<--%n", l);
}
}
}
--
ss at comp dot lancs dot ac dot uk