如何在Java中使用textfield中的用户输入运行.sh脚本?

如何在Java中使用textfield中的用户输入运行.sh脚本?,java,input,sh,jtextfield,processbuilder,Java,Input,Sh,Jtextfield,Processbuilder,我尝试使用txtfield中的用户输入启动.sh脚本。 想法:用户在txt文件中写入参数。当按下按钮并使用此参数启动脚本时 我的代码: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { String valueURL; valueURL = URLtxt.getText().toString();

我尝试使用txtfield中的用户输入启动.sh脚本。 想法:用户在txt文件中写入参数。当按下按钮并使用此参数启动脚本时

我的代码:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         
String valueURL;
valueURL = URLtxt.getText().toString();              
ProcessBuilder processBuilder = new ProcessBuilder();
// -- Linux --
// Run a shell command
processBuilder.command("bash", "-c","nikto -h", valueURL,");     

try {

Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");         
}
int exitVal = process.waitFor();
if (exitVal == 0)                                            
 {
    this.hide();
    ScanWS sws = new ScanWS() ;
    sws.setVisible(true);
  • UI线程中会触发一个事件侦听器,因此处理速度必须很快。您的侦听器实现等待外部进程,它可以冻结您的ui。所有进程触发和关心逻辑必须在单独的线程中启动

  • 流程是一个非常古老的结构,它有输入/输出问题。一个进程在其工作期间将某些内容写入其输出流的缓冲区中,当缓冲区全部填满时,进程会猛冲,等待输出流产生一些空间。 因此,process.input和process.output处理器也必须在单独的线程中工作


  • 你的代码的结果是什么?引用显然是错误的。您可能需要类似于
    processBuilder.command(“bash”、“-c”、“nikto-h\”、“$1\”、”、valueURL)的命令
    --注意
    bash-c“script;more script”
    后面的第一个参数是一个占位符(用于填充
    $0
    )。但是
    bash-c
    在这里没有做任何有用的事情;可能简化为
    processBuilder.command(“nikto”、“-h”、valueURL)结果是命令“nikto”的开头,带有参数-h和web url;它很好用。但我不会将GUI中jtextfield的字符串放在google.com所在的位置