Runtime.getRuntime failed to get output same time but later

你。 提交于 2019-12-11 10:44:15

问题


I'm currently making firefox addon development GUI tool using Java. However I am stuck when trying to get output of a .bat file.

When I run .bat file using java I can see the output, but there are 3 commands written in the bat file. When first command executes I can get the output simultaneously. But when it execute second command output not coming. And when .bat file exist I get all the output which didn't come simultaneously.

I'm getting output immediately when it execute:

call "C:\mozilla-build\addon-sdk-1.16\bin\activate.bat

But I'm not getting output simultaneously for following command:

call cfx run

But I know it's executing because firefox window pops up. I get all the output suddenly when I execute proc.destroy();

This is my bat file:

@echo off
call  %1
cd C:\Users\Madhawa.se\Desktop\workingfox\beauty
call cfx run
pause  

This is my Java code:

Thread t = new Thread(new Runnable() {

    @Override
    public void run() {
        try {
            Runtime rt = Runtime.getRuntime();

            String[] commands = {"C:\\Users\\Madhawa.se\\Desktop\\workingfox\\runner\\foxrun.bat", "C:\\mozilla-build\\addon-sdk-1.16\\bin\\activate.bat"};

            proc = rt.exec(commands);

            BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));

            BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

            // read the output from the command

            String s = null;
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            // read any errors from the attempted command
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
            proc.waitFor();
            System.out.println("success");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
});
t.start();

How to get output immediately and why it acts differently for this command?


回答1:


i was able to fix it using process builder instead of runtime.exec .and inheriteIo doesn't work .it blocks the realtime output

Thread t = new Thread(new Runnable() {
    private String s;

    @Override
    public void run() {
        try {

            Component selectedComponent = jTabbedPane2.getSelectedComponent();
            if (selectedComponent instanceof MyTextArea) {
                String response = "";
                System.out.println("yes");
                MyTextArea temptextarea = (MyTextArea) selectedComponent;
                String xpiPath = new File(temptextarea.getNameX()).getParentFile().getPath();

                String[] commands = {"C:\\Users\\Madhawa.se\\Desktop\\workingfox\\runner\\foxrun.bat", "C:\\mozilla-build\\addon-sdk-1.16\\bin\\activate.bat

                ProcessBuilder process = new ProcessBuilder(commands);
                process.redirectErrorStream(true);

                Process shell = process.start();

                //shell.waitFor();
                BufferedReader stdInput = new BufferedReader(new InputStreamReader(shell.getInputStream()));
                BufferedReader stdError = new BufferedReader(new InputStreamReader(shell.getErrorStream()));

                // read the output from the command
                System.out.println("Here is the standard output of the command:\n");
                while ((s = stdInput.readLine()) != null) {
                    System.out.println("s:" + s);
                }

                // read any errors from the attempted command
                System.out.println("Here is the standard error of the command (if any):\n");
                while ((s = stdError.readLine()) != null) {
                    System.out.println("w:" + s);
                }
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }


来源:https://stackoverflow.com/questions/26489106/runtime-getruntime-failed-to-get-output-same-time-but-later

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!