Запустить командную строку из Java? - PullRequest
4 голосов
/ 08 июня 2011

Привет, я хочу запустить что-то из командной строки, используя Java

я хочу перейти в следующий каталог C:\Program Files\OpenOffice.org 3\program\ а потом беги soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

Я пытался, но я не могу этого сделать!

мой код

public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            Runtime rt = Runtime.getRuntime();
            //Process pr = rt.exec("cmd /c dir");

           // Process pr = rt.exec("cmd /c dir");

            Process pr = rt.exec(new String[]{"C:\\Program Files\\OpenOffice.org 3\\program\\soffice", 
                    "-headless",
                    "-accept='socket,host=127.0.0.1,port=8100;urp;'",
                    "-nofirststartwizard"});

            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

            String line=null;

            while((line=input.readLine()) != null) {
                System.out.println(line);
            }

            int exitVal = pr.waitFor();
            System.out.println("Exited with error code "+exitVal);

        } catch(Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }
    }

Ответы [ 6 ]

6 голосов
/ 08 июня 2011

Не используйте cd, а используйте метод строкового массива:

rt.exec(new String[]{"C:\\Program Files\\OpenOffice.org 3\\program\\soffice.exe", 
    "-headless",
    "-accept='socket,host=127.0.0.1,port=8100;urp;'",
    "-nofirststartwizard"});
3 голосов
/ 10 июня 2011

Наконец-то я решил это

String[] SOFFICE_CMD = { "C:/Program Files/OpenOffice.org 3/program/soffice", "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager", "-invisible", "-nologo"}; 
        Runtime.getRuntime().exec(SOFFICE_CMD); 

Спасибо всем за поддержку !!

2 голосов
/ 08 июня 2011

@ Хариндер: Я хотел бы предложить альтернативный метод.То, что вы можете сделать, это:

  1. Сначала попробуйте запустить все, что вы хотите запустить из командной строки напрямую со всеми атрибутами и т. Д. Как только вы успешно запустите службу / приложение из командной строкинепосредственно выполните 2.

  2. Перейдите и сохраните команду в файле .bat.

Например: C: \ m-admin \ app.exe Я сохранил это как app.bat на C: \

  1. Теперь измените ваш Java-код соответствующим образом, чтобы выполнить этот скрипт, который, в свою очередь, выполнит ваше приложение или службу.

Например:

 ProcessBuilder builder = new ProcessBuilder(new String[]{"cmd", "/c","C:\\app.bat"});
 Process pr =   builder.start();
 BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
  1. , если даже это не работает ... нам нужно начинать с нуля.
1 голос
/ 08 июня 2011

Я думаю, что нашел вашу ошибку: измените ваш аргумент на следующий: посмотрите, работает ли он:

(new String[]{"cmd", "/c", "C:\\Program Files\\OpenOffice.org 3\\program\\soffice",
            "-headless",
            "-accept='socket,host=127.0.0.1,port=8100;urp;'",
            "-nofirststartwizard"})
1 голос
/ 08 июня 2011

Я отредактировал код (ниже), используя метод компоновщика процессов.Посмотрите, работает ли это для вас.Использование exec иногда не работает из-за нарушений прав доступа:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        Runtime rt = Runtime.getRuntime();
        //Process pr = rt.exec("cmd /c dir");

       // Process pr = rt.exec("cmd /c dir");
       ProcessBuilder builder = new ProcessBuilder(new String[]{"cmd", "/c", "C:\\Program Files\\OpenOffice.org 3\\program", "soffice",
        "-headless",
        "-accept='socket,host=127.0.0.1,port=8100;urp;'",
        "-nofirststartwizard"});
       Process pr =   builder.start();
       BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));


        String line=null;

        while((line=input.readLine()) != null) {
            System.out.println(line);
        }

        int exitVal = pr.waitFor();
        System.out.println("Exited with error code "+exitVal);

    } catch(Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
}

}

0 голосов
/ 08 июня 2011

Состояние выхода 0 обычно означает отсутствие ошибки.

Попробуйте вместо этого использовать ProcssBuilder.

С ProcessBuilder вы можете установить рабочий каталог .

Здесь некоторые ссылки , которые могут помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...