Задать вопрос
Sapun4ik
@Sapun4ik

Получить ответ от закрытой программы(C#/Java)?

Доброе время суток.
1)Из кода java необходимо запустить консольное приложение передав в него строку(Адрес xml в котором содержатся настройки).
2)После того как программа закончит работу, и закроется (консольное приложение выполняет роль конвертера xml -> word doc) необходимо получить ответ о статусе отработки. Все ли успешно либо какие косяки.
1) первое я сделал:
public class MyClass {
	public static void main (String[] args) throws Exception {
		 Runtime.getRuntime (). exec("cmd.exe /c start D:\\program1.exe 55");
    }
}

2) в консоли строку забираю, все нормально:
namespace program1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                if (args.Length != 0)
                {
                    foreach (string s in args)
                    {
                        Console.WriteLine(s);
                    }
                }
                else
                {
                    Console.WriteLine("Возникла ошибочка!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}


Ответ (0)-успешно запущено , (1) - произошла ошибка я также получил. Но нужно более информативно отслеживать ошибку. И главное ответ по закрытию программы. А теперь вопросы:
Как получить результат завершения? Как отправить после закрытия консоли(Закрывается автоматически как создаст и заполнить документ word)? И как получить в java?
Так же если я не правильно вызываю или мб принимаю данные, поправьте плз=)
  • Вопрос задан
  • 669 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 3
pi314
@pi314
Президент Солнечной системы и окрестностей
Вам поможет только ProcessBuilder.

Подробные примеры.
Ответ написан
1. Можно перенаправить стандартные потоки ввода/вывода при запуске C# программы и потом считать результаты уже в java программе. Это найболие красивый и эффективный способ на мой взгляд. Так как не нужно ничего менять в самой C# программе.
2. Писать все в файл, а не в консоль для C# и потом открыть его в Java.
3. Сделать для кажной ошибки свой возврат в C#, т.е. не только 0, 1, а 2, 3, 4 и т.д. каждая ошибка под своим номером.

UPD. По поводу 3 варианта:
namespace program1
{
    class Program
    {
        static int Main(string[] args)
        {
            try
            {
                if (args.Length != 0)
                {
                    foreach (string s in args)
                    {
                        Console.WriteLine(s);
                    }
                }
                else
                {
                    Console.WriteLine("Возникла ошибочка!");
                }
            }
            catch (DivideByZeroException ex)
            {
                return 3;
            }
            catch (FormatException ex)
            {
                return 2;
            }
            catch (Exception ex)
            {
                return 1;
            }
        }
    }
}


Здесь мы изменяем тип который возвращает main с void на int и потом, в зависимости от исключения, возвращаем разные значения из main.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы