Как запустить скрипт .sh с пользовательским вводом из текстового поля в Java? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь запустить .sh скрипт с пользовательским вводом из txtfield. Идея: пользователь записывает параметр в текстовый файл. Когда нажимаете кнопку и скрипт запускается с этим параметром.

Мой код:

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

1 Ответ

0 голосов
/ 10 октября 2019
  1. Источник событий запускается в потоке пользовательского интерфейса, поэтому обработка должна быть быстрой . Ваша реализация слушателя ждет внешнего процесса , он может заморозить ваш пользовательский интерфейс. Вся логика запуска и обслуживания процесса должна начинаться в отдельном потоке.

  2. Процесс является довольно старой конструкцией и имеет проблемы ввода / вывода. Процесс записывает что-то во время своей работы в буфер своего выходного потока, а когда весь буфер заполнен - ​​ процесс обретает , ожидая, пока выходной поток освободит место. Таким образом, процессоры process.input и process.output также должны работать в отдельных потоках.

...