Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > использование класса RunTime


Автор: katala 5.6.2008, 13:16
Необходимо запустить Ехе файл с параметрами, например:
test.exe paramValue -f paramvalue - n

 следующий код 

Код

        Runtime rt = Runtime.getRuntime();
        
        String[] cmdarray = new String[5];
        cmdarray[0] = pathToExeFile;
        cmdarray[1] = pathToHtml;
        cmdarray[2] = "-f temp.pdf";
        cmdarray[3] = "-n";
        try {
            Process proc = rt.exec(cmdarray);
        } catch (IOException e) {
            System.out.println("error: "  + e.getMessage());
        }



в результате нет ни ошибок и при это екзешник тоже не отрабатывает. В чем может быть ошибки и что сделано неправильно?

Автор: katala 5.6.2008, 14:21
ошибки все таки были. исправил на

Код

    Runtime rt = Runtime.getRuntime();
        
        String[] cmdarray = new String[7];
        cmdarray[0] = pathToExeFile;
        cmdarray[1] = pathToHtml;
        cmdarray[2] = "-f";
        cmdarray[3] = "C:\\temp.pdf";
        cmdarray[4] = "-n";
        try {
                Process proc = rt.exec(cmdarray);
                BufferedInputStream in = new BufferedInputStream(proc.getErrorStream());
                byte[] buf = new byte[10000];
                int length = in.read(buf);
                
                System.out.println(new String(buf,0,length));
            
        } catch (IOException e) {
            System.out.println("error: " + e.getMessage());
        }


теперь ошибок нет,  но и результата тоже :(

и еше  воспринимается ил теперь 
        cmdarray[2] = "-f";
        cmdarray[3] = "C:\\temp.pdf";

в качества ключ - значение 
или это теперь два разных параметра (если это так, то тогда ошибка именно в этом)?

Автор: LSD 5.6.2008, 15:01
А из stdin кто читать будет? И почему читаешь только один раз а не в цикле пока процес работает?

Автор: katala 10.6.2008, 11:32
Цитата

А из stdin кто читать будет? И почему читаешь только один раз а не в цикле пока процес работает?

ты иммеешь ввиду это:
Код

            try {
                BufferedInputStream    in;
                Character c; 
                
                Process proc = rt.exec(cmdarray);

                try {
                    while (0 != proc.waitFor()) {
                        in = new BufferedInputStream(proc.getErrorStream());
                    
                          while( in.available() > 0) {
                               c = new Character( (char) in.read());
                               System.out.print(c);
                            }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                
                in = new BufferedInputStream(proc.getInputStream());
                
                while( in.available() > 0) {
                    c = new Character( (char) in.read());
                    System.out.print(c);
                }
        
            } catch (IOException e) {
                System.out.println("error: " + e.getMessage());
            }


Автор: katala 10.6.2008, 12:27
все, вопрос  снимается. разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)