C # вызвать java.exe и получить результат из cmd неправильно - PullRequest
2 голосов
/ 23 марта 2012

Я хочу использовать процесс C # для получения результата из командной строки. Команда «java HelloWorld 1» (я собрал ее в файл HelloWorld.class, используя «javac HelloWorld.java» )

Java-код:

public class HelloWorld {

    public HelloWorld() {}

    public static void main(String[] args) {    System.out.println("STARTED");
        try {
            int param = Integer.parseInt(args[0].toString());
            if (param == 1) {
                System.out.println("BASE 64!");
            } else if (param == 2) {
                System.out.println("MD5!");
            } else {
                System.out.println("INPUT NOT MATCH!");
            }
        } catch (Exception ee) {
            System.out.println("NO INPUT - ERROR");
        }
    } }

и код C #:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = "C:\\Program Files\\Java\\jdk1.6.0_25\\bin\\java.exe";
    p.StartInfo.Arguments = "HelloWorld 1";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.Start();
    string strOutput = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

Но strOutput - это "". Можете ли вы дать мне решение? Спасибо!

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Скорее всего, java не может найти ваш файл HelloWorld.class.

В этом случае он будет записывать в стандартную ошибку что-то вроде

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld

, а затем в стекtrace.

И он ничего не запишет в стандартный вывод

Я предлагаю вам сделать две вещи:

1) также прочитать из стандартной ошибки и посмотреть, что это говорит

2) добавить аргумент classpath перед файлом класса

 p.StartInfo.Arguments = " -cp C:\\code\\myapp HelloWorld 1";

(очевидно, подставляя правильный путь к папке, содержащей HelloWorld.class)

0 голосов
/ 23 марта 2012

Другой альтернативой является установка информации о запуске процесса в расположение HelloWorld:

ProcessStartInfo pInfo = new ProcessStartInfo(@"C:\Program Files\Java\jdk1.6.0_25\bin\java.exe");
pInfo.Arguments = = "HelloWorld";
pInfo.WorkingDirectory = @"C:\JavaFiles";
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;

Process javaProc = Process.Start(pInfo);
string output = javaProc.StandarOutput.ReadToEnd();

РЕДАКТИРОВАТЬ: я только что понял, что ваш p был объектом процесса. WorkingDirectory является собственностью ProcessStartInfo

Предполагается, что C: \ JavaFiles \ HelloWorld.class и C: \ JavaFiles \ HelloWorld.java существуют. Вы также должны последовать совету Грега и прочитать StandardError, так как это поможет вам устранить будущие проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...