Re[17]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.10.12 16:01
Оценка: 12 (1)
Здравствуйте, RussianFellow, Вы писали:

RF>И как же правильно считывать строки, если в stdin проводятся операции только с байтами?


С чего бы это?

Откуда код этих StreamGobbler'ов взялся? Похоже, изначально это был какой-то демонстрационный код, который делал не совсем то, что нужно в твоем случае.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[18]: [-] ДимДимычу респектище за мегатерпение %)
От: zaufi Земля  
Дата: 15.10.12 18:12
Оценка: +1
я бы так не смог
Как в Korn Shell правильно запустить из Java-программы другую программу?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 10.10.12 06:01
Оценка:
Как в Korn Shell правильно запустить из Java-прогарммы другую программу, являющуюся консольным приложением и написанную на другом языке (например, на Fortran)?
Я имею ввиду то, чтобы не было никаких зависаний и эта другая программа правильно производила ввод и вывод информации.
1613 г. = 2024 г.
Re: Как в Korn Shell правильно запустить из Java-программы другую программу?
От: ДимДимыч Украина http://klug.org.ua
Дата: 10.10.12 15:17
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как в Korn Shell правильно запустить из Java-прогарммы другую программу, являющуюся консольным приложением и написанную на другом языке (например, на Fortran)?


Korn Shell к запуску программ из Java не имеет ни малейшего отношения.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 11.10.12 13:22
Оценка:
Есть Java-ская программа test1.jar, внутри которой происходит запуск Fortran-овской программы beg_matr. Всё это происчходит в Unix, в среде Korn Shell.

Вот код файла test1.java :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.nio.*;
import java.lang.*;
import java.util.*;
import java.text.*;

public class test1 {

    private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="10,10"

    private JPanel jContentPane = null;

    private JButton jButton = null;

    /**
     * This method initializes jButton    
     *     
     * @return javax.swing.JButton    
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(31, 31, 164, 29));
            jButton.setText("Запустить программу");
            jButton.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent e) {
                    //System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
                    try {
                        Process  proc = Runtime.getRuntime().exec("run.bat");
                        StreamGobbler1  errorGobbler = new StreamGobbler1(proc.getErrorStream(), "ERROR");
                        StreamGobbler1  outputGobbler = new StreamGobbler1(proc.getInputStream(), "OUTPUT");
                        StreamGobbler2  inputGobbler = new StreamGobbler2(proc.getOutputStream(), "INPUT");
                        errorGobbler.start();
                        outputGobbler.start();
                        inputGobbler.start();
                        int exitVal = proc.waitFor();
                    } catch (Exception ex) {
                        System.out.println(ex.toString());
                    }
                }
            });
        }
        return jButton;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                test1 application = new test1();
                application.getJFrame().setVisible(true);
            }
        });
    }

    /**
     * This method initializes jFrame
     * 
     * @return javax.swing.JFrame
     */
    private JFrame getJFrame() {
        if (jFrame == null) {
            jFrame = new JFrame();
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setSize(241, 135);
            jFrame.setContentPane(getJContentPane());
            jFrame.setTitle("Application");
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = jFrame.getSize();
            if (frameSize.height > screenSize.height) {
                frameSize.height = screenSize.height;
            }
            if (frameSize.width > screenSize.width) {
                frameSize.width = screenSize.width;
            }
            jFrame.setLocation((screenSize.width - frameSize.width) / 2,
                    (screenSize.height - frameSize.height) / 2);
        }
        return jFrame;
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }

}


Код файла StreamGobbler1.java:
import java.lang.*;
import java.util.*;
import java.text.*;
import java.io.*;
import java.nio.*;

public class StreamGobbler1 extends Thread {
    InputStream  is;
    String  type;
    
    StreamGobbler1 (InputStream is, String type) {
        this.is = is;
        this.type = type;
    }
    
    public void run() {
        try {
            InputStreamReader  isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ((line=br.readLine())!=null)  System.out.println(type + ">" + line);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}


Код файла StreamGobbler2.java:
import java.lang.*;
import java.util.*;
import java.text.*;
import java.io.*;
import java.nio.*;

public class StreamGobbler2 extends Thread {
    OutputStream  os;
    String  type;
    
    StreamGobbler2 (OutputStream os, String type) {
        this.os = os;
        this.type = type;
    }
    
    public void run() {
        try {
            /* InputStreamReader  isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line=null;
            while ((line=br.readLine())!=null)  System.out.println(type + ">" + line); */
            OutputStreamWriter  osr = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osr);
            byte b[] = new byte[80];
            while (System.in.read(b, 0, 80)!=-1) {
                String s = new String(b);
                s = type + ">" + s;
                bw.write(s);
                bw.newLine();
            }
            System.in.read(b, 0, 80);
            
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}


Смысл такой: файл runtest.bat запускает программу test1.jar, имеющую оконный интерфейс. А из программы test1.jar при нажатии на кнопку "Запустить программу" должна вызываться программа beg_matr, работающая в консольном режиме. Однако в терминальном окне, появляющемся после запуска runtest1.bat, после нажатия на кнопку "Запустить программу", ничего не происходит--происходит зависание программы. В чём тут дело? Как исправить ошибку?

Текст файла runtest1.bat:
cd /home/KOL/ryk/CallTEMP

java -jar test1.jar


заменил разметку. тэг [q] предназначен для текстовых цитат, а не для кода. — Кодт
1613 г. = 2024 г.
Re[3]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.10.12 02:10
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Однако в терминальном окне, появляющемся после запуска runtest1.bat, после нажатия на кнопку "Запустить программу", ничего не происходит--происходит зависание программы. В чём тут дело? Как исправить ошибку?


Метод exec() нормально отрабатывает? Исключение не бросает?
Вообще это больше по java вопрос, а не по unix.

RF>Текст файла runtest1.bat:

RF>
RF>cd /home/KOL/ryk/CallTEMP

RF>java -jar test1.jar
RF>


Если файл имеет в точности такой вид, то он и не запустится. Для скриптов в первой строчке нужно указывать интерпретатор, например #!/bin/sh. Ну и бит executable должен быть установлен.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[4]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.10.12 05:37
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


RF>>Однако в терминальном окне, появляющемся после запуска runtest1.bat, после нажатия на кнопку "Запустить программу", ничего не происходит--происходит зависание программы. В чём тут дело? Как исправить ошибку?


ДД>Метод exec() нормально отрабатывает? Исключение не бросает?

ДД>Вообще это больше по java вопрос, а не по unix.

RF>>Текст файла runtest1.bat:

RF>>
RF>>cd /home/KOL/ryk/CallTEMP

RF>>java -jar test1.jar
RF>>


ДД>Если файл имеет в точности такой вид, то он и не запустится. Для скриптов в первой строчке нужно указывать интерпретатор, например #!/bin/sh. Ну и бит executable должен быть установлен.


Как установить бить executable ? (Я Unix и Korn Shell почти не знаю).

Кстати, из этого файла runtest1.bat мой JAR-файл test1.jar благополучно запускается. Не запускается только beg_matr из файла test1.jar .
1613 г. = 2024 г.
Re[5]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.10.12 06:25
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как установить бить executable ? (Я Unix и Korn Shell почти не знаю).


Вообщез
chmod a+x file

Но раз запускается, значит интерпретатор указан и executable бит выставлен.

RF>Кстати, из этого файла runtest1.bat мой JAR-файл test1.jar благополучно запускается. Не запускается только beg_matr из файла test1.jar .


Я не вижу кода, выполняющего запуск beg_matr. Отдельно, не из программы, он запускается?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[6]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.10.12 10:31
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


RF>>Как установить бить executable ? (Я Unix и Korn Shell почти не знаю).


ДД>Вообщез
chmod a+x file

ДД>Но раз запускается, значит интерпретатор указан и executable бит выставлен.

RF>>Кстати, из этого файла runtest1.bat мой JAR-файл test1.jar благополучно запускается. Не запускается только beg_matr из файла test1.jar .


ДД>Я не вижу кода, выполняющего запуск beg_matr. Отдельно, не из программы, он запускается?


Да, запускается.
1613 г. = 2024 г.
Re[7]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.10.12 11:14
Оценка:
Здравствуйте, RussianFellow, Вы писали:

ДД>>Я не вижу кода, выполняющего запуск beg_matr. Отдельно, не из программы, он запускается?

RF>Да, запускается.

Значит показывай код, который его пытается запускать.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[8]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.10.12 12:00
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


ДД>>>Я не вижу кода, выполняющего запуск beg_matr. Отдельно, не из программы, он запускается?

RF>>Да, запускается.

ДД>Значит показывай код, который его пытается запускать.


Здесь:

http://www.rsdn.ru/forum/unix/4925285.1
Автор: RussianFellow
Дата: 11.10.12
1613 г. = 2024 г.
Re[9]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.10.12 12:05
Оценка:
Здравствуйте, RussianFellow, Вы писали:

ДД>>Значит показывай код, который его пытается запускать.

RF>Здесь:http://www.rsdn.ru/forum/unix/4925285.1
Автор: RussianFellow
Дата: 11.10.12


Здесь я вижу только один запуск: Runtime.getRuntime().exec("run.bat");
beg_mart нигде не упоминается.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[10]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 12.10.12 12:17
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


ДД>>>Значит показывай код, который его пытается запускать.

RF>>Здесь:http://www.rsdn.ru/forum/unix/4925285.1
Автор: RussianFellow
Дата: 11.10.12


ДД>Здесь я вижу только один запуск: Runtime.getRuntime().exec("beg_matr");

ДД>beg_mart нигде не упоминается.

Ой, прошу прощения, beg_matr а не run_bat .
1613 г. = 2024 г.
Re[11]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 12.10.12 12:44
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Ой, прошу прощения, beg_matr а не run_bat .


На какой именно строчке "зависает"? Доходит ли управление до proc.waitFor()? Если да, то какое возвращается значение в exitVal? Если нет, выполняется ли блок catch {} ?
Как вообще этот beg_matr взаимодействует с окружающей средой? Читает данные из stdin? Может оно запускается, но ждет данных. А данные не поступают, т.к. inputGobbler, насколько могу понять, пытается копировать данные со своего stdin'а.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[12]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.10.12 05:33
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


RF>>Ой, прошу прощения, beg_matr а не run_bat .


ДД>На какой именно строчке "зависает"? Доходит ли управление до proc.waitFor()? Если да, то какое возвращается значение в exitVal? Если нет, выполняется ли блок catch {} ?


Немножко модифицировал свой код--сделал так, чтобы на экран выводились сообщения о том, на каких шагах у меня выполняется программа:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.nio.*;
import java.lang.*;
import java.util.*;
import java.text.*;

public class test1 {

    private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="10,10"

    private JPanel jContentPane = null;

    private JButton jButton = null;

    /**
     * This method initializes jButton    
     *     
     * @return javax.swing.JButton    
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(31, 31, 164, 29));
            jButton.setText("Запустить программу");
            jButton.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent e) {
                    //System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
                    boolean  flag = true;
                    
                    System.out.println("Перед блоком try");
                    try {
                        System.out.println("перед вызовом Runtime.getRuntime().exec(\"beg_matr\")");
                        Process  proc = Runtime.getRuntime().exec("beg_matr");
                        System.out.println("после Runtime.getRuntime().exec(\"beg_matr\")");
                        StreamGobbler1  errorGobbler = new StreamGobbler1(proc.getErrorStream(), "ERROR");
                        System.out.println("после ERROR");
                        StreamGobbler1  outputGobbler = new StreamGobbler1(proc.getInputStream(), "OUTPUT");
                        System.out.println("после OUTPUT");
                        StreamGobbler2  inputGobbler = new StreamGobbler2(proc.getOutputStream(), "INPUT");
                        System.out.println("после INPUT");
                        errorGobbler.start();
                        System.out.println("после errorGobbler.start()");
                        outputGobbler.start();
                        System.out.println("после outputGobbler.start()");
                        inputGobbler.start();
                        System.out.println("после inputGobbler.start()");
                        int exitVal = proc.waitFor();
                        System.out.println("после proc.waitFor()");
                    } catch (Exception ex) {
                        System.out.print("Ошибка: ");
                        System.out.println(ex.toString());
                        flag = false;
                    }
                    if (flag==true)  System.out.println("после блока try--catch");
                }
            });
        }
        return jButton;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                test1 application = new test1();
                application.getJFrame().setVisible(true);
            }
        });
    }

    /**
     * This method initializes jFrame
     * 
     * @return javax.swing.JFrame
     */
    private JFrame getJFrame() {
        if (jFrame == null) {
            jFrame = new JFrame();
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jFrame.setSize(241, 135);
            jFrame.setContentPane(getJContentPane());
            jFrame.setTitle("Application");
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = jFrame.getSize();
            if (frameSize.height > screenSize.height) {
                frameSize.height = screenSize.height;
            }
            if (frameSize.width > screenSize.width) {
                frameSize.width = screenSize.width;
            }
            jFrame.setLocation((screenSize.width - frameSize.width) / 2,
                    (screenSize.height - frameSize.height) / 2);
        }
        return jFrame;
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }

}


В результате в терминальное окно выводится следующее:


Перед блоком try
перед вызовом Runtime.getRuntime().exec("beg_matr")
после Runtime.getRuntime().exec("beg_matr")
после ERROR
после OUTPUT
после INPUT
после errorGobbler.start()
после outputGobbler.start()
после inputGobbler.start()


После этого на экран ничего не выводится, если не нажимать Ctrl-C. При нажатии Ctrl-C на экран выводится следующее:

^Cпосле proc.waitFor()
после блока try--catch


Что это может означать?

ДД>Как вообще этот beg_matr взаимодействует с окружающей средой? Читает данные из stdin? Может оно запускается, но ждет данных. А данные не поступают, т.к. inputGobbler, насколько могу понять, пытается копировать данные со своего stdin'а.


Да, программа beg_matr выводит на экран (в терминальнео окно) строку сообщения--спрашивает, какое имя должно быть у файла данных, потом ждёт ввода этого файла, затем производит вычисления и выводит информацию в это терминальное окно. По мере своего выполнения прогармма beg_matr также несколько раз спрашивает пользователя, какие числовые значения, необходимые для вычислений, нужно ввести. Пользователь вводит эти значения, программа beg_matr продолжает счёт и в результате выводит результат вычислений на экран.

Как мне решить мою проблему? Как сделать так, чтобы прогарамма beg_matr нормально работала после запуска из прогарммы test1.jar ?
1613 г. = 2024 г.
Re[13]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.10.12 07:40
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>После этого на экран ничего не выводится, если не нажимать Ctrl-C. При нажатии Ctrl-C на экран выводится следующее:


RF>

RF>^Cпосле proc.waitFor()
RF>после блока try--catch


RF>Что это может означать?


beg_matr запустилась и чего-то ждет. Наверное, ждет данных со стандартного ввода. Когда приходит Ctrl-C, beg-matr завершается по сигналу. Если в сообщении после "proc.waitFor()" еще вывести значение exitVal, то скорее всего оно будет равно 130. Проверь на всякий случай, прав ли я в своих догадках.

RF>Да, программа beg_matr выводит на экран (в терминальнео окно) строку сообщения--спрашивает, какое имя должно быть у файла данных,


Эта строка завершается переводом на новую строку?
Судя по коду StreamGobbler1, он пытается прочитать целую строку от beg_matr и потом вывести ее в свой терминал. Если beg_matr выдает строку без перевода, то естественно br.readLine() будет ждать вечно.
Если же beg_mart выдает целую строку с переводом, то нужно разбираться, почему она не попадает в терминал запускающей программы. В этом случае советую расставить отладочные сообщения также в методе StreamGobbler1.run().

RF>потом ждёт ввода этого файла, затем производит вычисления и выводит информацию в это терминальное окно.


Вероятнее всего, она как раз и ждет имени этого файла. Попробуй его ввести в терминал запускающей программы. StreamGobbler2, теоретически, передаст его в beg_matr.

RF>По мере своего выполнения прогармма beg_matr также несколько раз спрашивает пользователя, какие числовые значения, необходимые для вычислений, нужно ввести. Пользователь вводит эти значения, программа beg_matr продолжает счёт и в результате выводит результат вычислений на экран.


В твоем случае эти данные должен вводить не пользователь, а запускающая программа, не так ли? Тогда нужно написать код в test1, который будет эти значения вводить вместо пользователя.
Вообще, если beg_matr диалоговая программа и работает линейно, то не понятно, зачем там вообще эти StreamGlobber'ы? После Runtime.getRuntime().exec() получаем Stream'ы и работаем с ними из основной нити.

RF>Как мне решить мою проблему? Как сделать так, чтобы прогарамма beg_matr нормально работала после запуска из прогарммы test1.jar ?


Итого: подавать ей на вход данные, в том порядке и формате, которые она ожидает.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[14]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.10.12 09:28
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, RussianFellow, Вы писали:


RF>>После этого на экран ничего не выводится, если не нажимать Ctrl-C. При нажатии Ctrl-C на экран выводится следующее:


RF>>

RF>>^Cпосле proc.waitFor()
RF>>после блока try--catch


RF>>Что это может означать?


ДД>beg_matr запустилась и чего-то ждет. Наверное, ждет данных со стандартного ввода. Когда приходит Ctrl-C, beg-matr завершается по сигналу. Если в сообщении после "proc.waitFor()" еще вывести значение exitVal, то скорее всего оно будет равно 130. Проверь на всякий случай, прав ли я в своих догадках.


RF>>Да, программа beg_matr выводит на экран (в терминальнео окно) строку сообщения--спрашивает, какое имя должно быть у файла данных,


ДД>Эта строка завершается переводом на новую строку?

ДД>Судя по коду StreamGobbler1, он пытается прочитать целую строку от beg_matr и потом вывести ее в свой терминал. Если beg_matr выдает строку без перевода, то естественно br.readLine() будет ждать вечно.
ДД>Если же beg_mart выдает целую строку с переводом, то нужно разбираться, почему она не попадает в терминал запускающей программы. В этом случае советую расставить отладочные сообщения также в методе StreamGobbler1.run().

RF>>потом ждёт ввода этого файла, затем производит вычисления и выводит информацию в это терминальное окно.


ДД>Вероятнее всего, она как раз и ждет имени этого файла. Попробуй его ввести в терминал запускающей программы. StreamGobbler2, теоретически, передаст его в beg_matr.


RF>>По мере своего выполнения прогармма beg_matr также несколько раз спрашивает пользователя, какие числовые значения, необходимые для вычислений, нужно ввести. Пользователь вводит эти значения, программа beg_matr продолжает счёт и в результате выводит результат вычислений на экран.


ДД>В твоем случае эти данные должен вводить не пользователь, а запускающая программа, не так ли? Тогда нужно написать код в test1, который будет эти значения вводить вместо пользователя.

ДД>Вообще, если beg_matr диалоговая программа и работает линейно, то не понятно, зачем там вообще эти StreamGlobber'ы? После Runtime.getRuntime().exec() получаем Stream'ы и работаем с ними из основной нити.

RF>>Как мне решить мою проблему? Как сделать так, чтобы прогарамма beg_matr нормально работала после запуска из прогарммы test1.jar ?


ДД>Итого: подавать ей на вход данные, в том порядке и формате, которые она ожидает.


Программа beg_matr сперва выводит сообщение


ИМЯ ФАЙЛА С ИСХОДНЫМИ ДАННЫМИ (БЕЗ РАСШИРЕНИЯ! DATA.PMO ПО УМОЛЧАНИЮ)


затем происходит переход на новую строку, где пользователь вводит имя файла (если он просто нажал ввод, то считается, что имя этого файла--DATA.PMO).
После этого программа beg_matr производит вычисления и выводит результаты на экран.

exitValue возвращает 130 .

Так как мне решить мою проблему? Моя программа test1 должна передавать значения вводимых данных в соответствующие потоки?
1613 г. = 2024 г.
Re[15]: Как в Korn Shell правильно запустить из Java-программ
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.10.12 11:26
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Программа beg_matr сперва выводит сообщение

RF>

RF>ИМЯ ФАЙЛА С ИСХОДНЫМИ ДАННЫМИ (БЕЗ РАСШИРЕНИЯ! DATA.PMO ПО УМОЛЧАНИЮ)

RF>затем происходит переход на новую строку,

Стоило бы разобраться, почему в таком случае эта строка не попадает в System.out.println().

RF>Моя программа test1 должна передавать значения вводимых данных в соответствующие потоки?


Да. В приведенном коде StreamGobbler2 передает дочернему процессу данные, прочитанные из stdin, причем почему-то по 80 байт, а не строками, и очевидно совсем не в том виде, как ожидает beg_matr.

RF>Так как мне решить мою проблему?


Изучать Java.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[16]: Как в Korn Shell правильно запустить из Java-программ
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 15.10.12 12:53
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

RF>>Моя программа test1 должна передавать значения вводимых данных в соответствующие потоки?


ДД>Да. В приведенном коде StreamGobbler2 передает дочернему процессу данные, прочитанные из stdin, причем почему-то по 80 байт, а не строками, и очевидно совсем не в том виде, как ожидает beg_matr.


И как же правильно считывать строки, если в stdin проводятся операции только с байтами?
1613 г. = 2024 г.
Re[19]: [-] ДимДимычу респектище за мегатерпение %)
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.10.12 20:28
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>я бы так не смог


Я рассматриваю это как возможность познать дао и постичь дзен
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.