如何在进程生成器中编写命令

时间:2012-02-21 12:37:32

标签: java processbuilder

我使用cygwin和java运行shell脚本。

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 个答案:

答案 0 :(得分:1)

由于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());

答案 1 :(得分:0)

ProcessBuilder有一个可以将数组传递给的vargs构造函数。将值完全按照文本框中的输入传递(无引号),它将为您处理任何必要的转义。