Bom dia, será que alguém poderia me dar um help?
Estou com o seguinte problema, eu preciso ler a saída de um processo no Linux, porém quando esse processo for um programa que aguarda ser fechado pelo o usuário ele não deve ler nada.
O que eu estava tentando fazer no código abaixo, só que sem sucesso, no switch-case era testar se há bytes coletados na saída do processo, se não houvesse ele deveria entrar no case 0, sendo que dessa forma que pensei o código não ficaria travado no sc.next().split("\n") até o usuário fechar o programa. Na verdade o problema que eu estou tentando resolver é uma forma de eu não ficar trava no sc.next().split("\n") quando o processo executado fosse, por exemplo, o “Eclipse”. O mais interessante é que quando eu depuro este código ele tem o comportamento que desejo, porém quando executo normalmente ele sempre cai no case 0.
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String... args) {
String cmd = "android";
ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
pb.redirectErrorStream(true);
try {
Process p = pb.start();
InputStream input = p.getInputStream();
int inputaAvaiable = input.available();
switch(inputaAvaiable) {
case 0:
System.out.println("Executado: "+ cmd);
break;
default:
Scanner sc = new Scanner(input);
// Captura a quebra de linha
sc.useDelimiter("\r");
String[] saida = sc.next().split("\n");
for(String s: saida)
System.out.print(s +"\n");
break;
}
input.close();
} catch (Exception e) {
System.out.println("Problema com a classe comandos");
e.printStackTrace();
}
}
}