Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Java运行linux(raspbian)命令(omxplayer)并获取输出_Java_Linux_Terminal_Raspberry Pi_Xbmc - Fatal编程技术网

Java运行linux(raspbian)命令(omxplayer)并获取输出

Java运行linux(raspbian)命令(omxplayer)并获取输出,java,linux,terminal,raspberry-pi,xbmc,Java,Linux,Terminal,Raspberry Pi,Xbmc,我创建了一个如下的程序来执行linux(raspbian)命令:“omxplayer”。 但我不知道为什么当我在命令行中键入omxplayer并点击Enter时,无法从omxplayer获得输出。但输出仅在视频结束时显示。 所以我想在程序中输入“omxplayer[video_name]”并点击“Enter”后立即获得输出。 就像在linux中直接输入命令行(终端)一样。 这是我的代码: public class testprog { public static void main(St

我创建了一个如下的程序来执行linux(raspbian)命令:“omxplayer”。 但我不知道为什么当我在命令行中键入omxplayer并点击Enter时,无法从omxplayer获得输出。但输出仅在视频结束时显示。 所以我想在程序中输入“omxplayer[video_name]”并点击“Enter”后立即获得输出。 就像在linux中直接输入命令行(终端)一样。 这是我的代码:

public class testprog {
    public static void main(String args[]) throws IOException {

        String in = "";
        while(in!="exit")
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            in = reader.readLine();
            runCommand(in);
        }
    }

    public static void runCommand(String command)
    {
           String s;
         Process p;
         try {
             System.out.println("run command " + command);
             p = Runtime.getRuntime().exec(new String[]{"bash", "-c",command});

             MyInputStreamReader reader1 = new MyInputStreamReader(p.getInputStream());
             reader1.setTag("in");
             reader1.start();

             MyInputStreamReader reader2 = new MyInputStreamReader(p.getErrorStream());
             reader2.setTag("in");
             reader2.start();


             p.waitFor();
             System.out.println ("exit: " + p.exitValue());
             p.destroy();
         } catch (Exception e) {}

    }
}

class MyInputStreamReader extends Thread{
    boolean isStop = false;
    ReadEventHandler handler;
    String tag;
    InputStream in;
    public MyInputStreamReader(InputStream in)
    {
        this.in = in;
    }

    public void setHandler(ReadEventHandler handler) {
        this.handler = handler;
    }
    public void setTag(String tag)
    {
        this.tag = tag;
    }

    public void run()
    {
        byte[] buff = new byte[8192];
        while (true) {
            //String line;
            try {
                int len  = in.read(buff);
                if (len == -1)
                {
                    return;
                }

                String line = new String(buff, 0, len);
                if (handler!=null)
                    handler.onReceived(line);
                System.out.println(tag +" " + line);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
    public void dispose()
    {
        this.isStop = true;
    }
    public interface ReadEventHandler
    {
        void onReceived(String line);
    }
}
我们非常感谢您的回复。谢谢你检查过这个了吗


我想这就是你要找的代码。

这正是我要找的。非常感谢。