Головная боль - запуск командного файла из Java - PullRequest
3 голосов
/ 11 октября 2011

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

Моя программа:

Все, что делает моя программа, это запускает командный файл в том же каталоге, что и моя программа.

Код:

try {

        Process p = Runtime.getRuntime().exec("cmd /c start startclient.bat");

      } catch (IOException ex) {

        Logger.getLogger(MCPFrame.class.getName()).log(Level.SEVERE, null, ex);

      }
    }

Когда я выполняю код, я получаю окно с предупреждением:

Windows cannot find 'startclient.bat'. Make sure you typed the name correctly, and then try again.

Если я укажу каталог с помощью:

Process p = Runtime.getRuntime().exec("cmd /c start C:\\Folder\\startclient.bat");

Я получу:

The system cannot find the path specified.
Press any key to continue . . . 
C:\Windows\system32>

Так что мое необразованное предположение таково, что когда я вызываю командный файлчерез Java он начинается в "C: \ Windows \ system32>", но когда я просто дважды щелкаю на командном файле, он начинается с локального каталога.

Как это исправить?

: (

PS Кикер, у меня на самом деле была эта штука в прошлом году, но по какой-то причине она больше не будет себя вести.

PPS Я использую Win 7, и все обновлено.

Ответы [ 2 ]

4 голосов
/ 11 октября 2011

(я бы просто прокомментировал, но у меня еще недостаточно представителей, чтобы комментировать, поэтому этот "ответ")

Я работал со многими пакетными файлами, вызываемыми из Java (как в Linux, OS X и Windows), так и Первое, что нужно знать, это то, что вы никогда не должны использовать конструктор, принимая Строка, потому что это, ну, просто проблематично.

Лучше всегда создавать массив аргументов самостоятельно и использовать этот метод:

public Process exec(String [] cmdArray)

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

Например, вместо того, чтобы заново изобретать колесо, вам может понравиться пример использования Apache:

http://commons.apache.org/exec/

2 голосов
/ 19 октября 2012

Когда я указываю каталог, такой как C: \ Folder \ startclient.bat, у меня есть обратная косая черта после

C:\\ as forward slashes and only one.

C:\\Folder/startclient.bat

Ниже должно работать для вас.Ну, я на это надеюсь.у меня работает.

    try {
        Runtime rt = Runtime.getRuntime();
        rt.exec("cmd.exe /c start C:\\Folder/startclient.bat");
    } catch (Exception ex){

    }
...