2011-06-08 4 views
4

Привет я хочу, чтобы запустить что-то из командной строки с помощью JavaВыполнить командную строку из 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(); 
     } 
    } 
+1

Какая ошибка вы получаете? Возможно, что софит не находится в вашем системном пути. – joekarl

+0

, пожалуйста, напишите * минимальный полный * код, который обнаруживает проблемное поведение, а также разместите stacktrace. –

+0

@joekarl Выход с кодом ошибки 0 – Harinder

ответ

3

Наконец я решил его

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); 

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

6

Не используйте 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"}); 
+0

с кодом выхода 0 – Harinder

+0

обновил мой вопрос, используя код ур – Harinder

+0

Могу я сначала сменить каталог, а затем запустить " soffice -headless -accept = "socket, host = 127.0.0.1, port = 8100; urp;" -nofirststartwizard " – Harinder

0

статус Выход 0 обычно не означает, что нет ошибки.

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

С помощью ProcessBuilder вы можете установить the working directory.

Herearesomelinks который может помочь.

+0

Кстати, если вы пытаетесь запустить приложение, вы также можете попробовать «Desktop.open()», но я не уверен, что это то, что вам нужно. – OscarRyz

+0

Я хочу C: \\ Program Files \\ OpenOffice.org 3 \\ program \\ быть моим каталогом при запуске soffice -headless -accept = "socket, host = 127.0.0.1, port = 8100; urp;" -nofirststartwizard – Harinder

+0

na на самом деле я пытаюсь запустить службу – Harinder

1

Я редактировал код (см. Ниже) с помощью метода построителя процессов. Посмотрите, работает ли это для вас. Использование 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

Нет, это не сработало. – Harinder

+0

Могу ли я изменить свой каталог, а затем запустить другую команду? – Harinder

+0

Я хочу C: \\ Program Files \\ OpenOffice.org 3 \\ program \\ быть моим каталогом при запуске soffice -headless -accept = "socket, host = 127.0.0.1, port = 8100; urp;" -nofirststartwizard – Harinder

1

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

(new String[]{"cmd", "/c", "C:\\Program Files\\OpenOffice.org 3\\program\\soffice", 
      "-headless", 
      "-accept='socket,host=127.0.0.1,port=8100;urp;'", 
      "-nofirststartwizard"}) 
+0

Я думаю, что u был прав о смене каталога в первую очередь. См. Вышеуказанный код еще раз ... Я внес некоторые изменения в оригинальную вещь, которую я опубликовал ... – knurdy

+0

говорит, что вышло с кодом ошибки 1 теперь не работает – Harinder

+0

@Harinder: Я делаю последнее усилие, я сделал некоторые изменения выше. ..try этот для меня ... – knurdy

2

@Harinder: Я хотел бы предложить альтернативный метод. Что вы можете сделать, так это;

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

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

Например: C: \ м-админ \ 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. если даже это не работает ... мы должны начать с нуля.
+0

@Harinder: Ваша проблема решена? – knurdy

Смежные вопросы