Как написать команду в процессе Builder - PullRequest
0 голосов
/ 21 февраля 2012

Я запускаю скрипт оболочки, используя cygwin и java.

ProcessBuilder pb =new ProcessBuilder
("sh", "app.sh", "ib2", "12", "11", "AK-RD", "02.20", "D:\\cygwin\\bin\\test\\delta");

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

Как это сделать.

 String cmmd[] = new String[8];
        cmmd[0] ="\"sh\"";
        cmmd[1] ="\"app.sh\"";
        cmmd[2] ="\""+txt_threeltr.getText()+"\"";
        cmmd[3] ="\""+txt_month_c.getText()+"\"";
        cmmd[4] ="\""+txt_year_C.getText()+"\"";
        cmmd[5] ="\""+txt_partNumber.getText()+"\"";
        cmmd[6] ="\""+txt_version.getText()+"\"";
        cmmd[7] ="\""+txt_destinationname.getText()+"\"";

ProcessBuilder pb =new ProcessBuilder(Arrays.toString(cmmd));

Или есть другой способ сделать это.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Поскольку ProcessBuilder имеет строковый конструктор varargs, вы можете сделать это:

ProcessBuilder pb = new ProcessBuilder(cmmd);

В качестве альтернативы, не создавайте массив.Создайте это так:

ProcessBuilder pb = new ProcessBuilder ("sh", 
                                        "app.sh", 
                                        txt_threeltr.getText(), 
                                        txt_month_c.getText(), 
                                        txt_year_C.getText(), 
                                        txt_partNumber.getText(), 
                                        txt_version.getText(), 
                                        txt_destinationname.getText());
0 голосов
/ 21 февраля 2012

ProcessBuilder имеет конструктор vargs, которому вы можете передать свой массив.Передавайте значения в точности как ввод из текстовых полей ( без кавычек ), и он позаботится о любом необходимом экранировании для вас.

...