Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Проблема с запуском процесса из-под JAR-файла


Автор: erslgoeirjh 18.4.2012, 13:31
Есть программа CallTEMP.jar на Java, которая вызывает другую программу beg_matr в ОС Unix. beg_matr работает в диалоговом текстовом режиме.
При этом программа CallTEMP создана на моём рабочем компьютере под ОС Windwows 7 в среде разработки JBuilder 2007 (в этой же среде разработки и был создан JAR-файл CallTEMP.jar). А программа beg_matr находится на другом компьютере (Unix-сервере), куда я перебросил мой JAR-файл по протоколу FTP.
CallTEMP вызывает программу beg_matr, программа beg_matr создаёт текстовой файл ACCOI, после отработки процесса beg_matr управление опять передаётся программе CallTEMP, которая обрабатывает файл ACCOI.

Вот мой код на Java в файле CallTEMP:

Код

try {
 Thread.sleep(500);
 pr = Runtime.getRuntime.exec("beg_matr");
 Thread.sleep(500);
} catch (Exception ctex) {
 // показ окна exceptionWarning с текстом ошибки exceptionString
 exceptionString = ctex.toString();
 exceptionString = "Ошибка вызова прогарммы beg_matr. " + exceptionString;
 exceptionWarning = new ExceptionWarning(null);
 exceptionWarning.setWarning(exceptionString);
 exceptionWarning.setVisible(true);
 return;
}


На моём рабочем компьютере происходит обращение к этому Unix-серверу через эмулятор Exceed 2008 (13-ая версия Exceed).
В Exceed я запускаю файл run.bat, который запускает файл CallTEMP.jar. При этом появляется сначала пустое окно, затем через несколько секунд появляется окно программы CallTEMP. Когда по нажатию кнопки на окне моей прогарммы должен быть вызов процесса beg_matr, то этого процесса не происходит, а происходит переход на дальнейшие действия программы CallTEMP. В результатае чего на экран выводится не сообщение об ошибке "Ошибка вызова программы beg_matr. <...>" (где <...>--собственно описание этой ошибки), а сообщение об ошибке

Цитата

java.io.FileNotFoundException: ACCOI (No such file or directory (errno:2))


То есть моя программа CallTEMP не производит вызова программы beg_matr, а сразу обращается к файлу ACCOI, который должен бы быть создан программой beg_matr.

А после завершения работы CallTEMP (нажатия на панели окне этой программы кнопки завершения или же через пункт меню в левом верхнем углу) на экране продолжает оставаться первоначальное пустое окно, которое появилось прежде окна моей программы. Это пустое окно я закрываю через меню в его левом верхнем углу.

Как мне сделать так, чтобы программа CallTEMP запускала у меня на Unix-сервере программу beg_matr, когда я работаю с этим Unix-сервером через программу Exceed?

Текст файла run.bat:

Цитата

cd /home/KOL/ryk/CallTEMP

java -jar CallTEMP.jar


(Программа beg_matr вызывается на Unix-сервере, если её запускать самостоятельно, а не из моей программы CallTEMP).  

Автор: erslgoeirjh 20.4.2012, 08:14
Я написал следующий код:

Код

try {
    String  line1="", line2="";
    ProcessBuilder  prb = new ProcessBuilder("beg_matr");
    prb.redirectErrorStream();
    pr = prb.start();
    InputStream  stderr = pr.getErrorStream();
    InputStreamReader isr1 = new InputStreamReader(stderr);
    BufferedReader br1 = new BufferedReader(isr1);
    InputStream  stdin = pr.getInputStream();
    InputStreamReader isr2 = new InputStreamReader(stdin);
    BufferedReader br2 = new BufferedReader(isr2);
    int exitval = pr.waitFor();
    br1.close();
    br2.close();
    isr1.close();
    isr2.close();
    stderr.close();
    stdin.close();
} catch (Exception ctex) {
    exceptionString = ctex.toString();
    exceptionString = "Ошибка вызова программы beg_matr. " + exceptionString;
    exceptionWarning = new ExceptionWarning(null);
    exceptionWarning.setWarning(exceptionString);
    exceptionWarning.setVisible(true);
    jTextField.setText("");
    return;                                                        
}
 

В результате чего моя программа CallTEMP всё равно зависает.

В чём причина этого? Может быть, что-то надо исправить в моём коде?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)