Как выполнить Java-программу с C #?

Интересно, знает ли кто-нибудь хороший способ выполнить программу командной строки Java из кода C # во время выполнения?

Это то же самое, что выполнять собственные .EXE-файлы?

Будет ли он работать синхронно или асинхронно (что означает, что мне, возможно, придется дождаться окончания streamа, чтобы узнать результаты)

В частности, я хотел бы назвать небольшую утилиту (которая, как представляется, написанная на Java), из веб-приложения на стороне сервера, чтобы выполнить некоторую обработку в текстовом файле. Я хочу подождать, пока это закончится, потому что после того, как программа Java завершила обработку текстового файла, я хочу захватить обработанный текст и использовать его в приложении C #.

Если вам нужен более тонкий контроль, чем запуск внешней программы, рассмотрим IKVM – http://www.ikvm.net/ – который обеспечивает способ запуска программ Java в мире .NET.

var processInfo = new ProcessStartInfo("java.exe", "-jar app.jar") { CreateNoWindow = true, UseShellExecute = false }; Process proc; if ((proc = Process.Start(processInfo)) == null) { throw new InvalidOperationException("??"); } proc.WaitForExit(); int exitCode = proc.ExitCode; proc.Close(); 

Это то же самое, что и выполнение собственных .EXE-файлов, только тот исполняемый файл, который вам нужно выполнить, это сам JVM (java.exe).

Итак, внутри вашего кодового вызова C #:

java.exe -jar nameofyourjavaprogram.jar

И все должно быть в порядке.

Если у вас нет java-программы в JAR-библиотеке, просто запустите JVM-запуск со всеми параметрами, которые вам нужны.

Я добавил пару строк к вышеуказанному решению. Я хотел вызвать веб-службу из приложения Silverlight, которое обрабатывает некоторые файлы с помощью java на сервере. Вышеупомянутое решение полезно, но я немного изменил его, так что он работает, поскольку вызов через веб-службу немного сложнее. Теперь у вас есть правильный инструмент для задания, C #, когда это необходимо, Java, когда C # не может решить проблему. Всегда хорошо знать больше, чем просто один способ сделать что-то. Теперь моя веб-служба, созданная в .Net, может разговаривать с Java.

 private void Merge(string strPath) { var processInfo = new ProcessStartInfo("C:\\Program Files\\Java\\jdk1.6.0_24\\binjava.exe", "-jar app.jar") { CreateNoWindow = true, UseShellExecute = false }; processInfo.WorkingDirectory = strPath; // this is where your jar file is. Process proc; if ((proc = Process.Start(processInfo)) == null) { throw new InvalidOperationException("??"); } proc.WaitForExit(); int exitCode = proc.ExitCode; proc.Close(); } 

Будет ли он работать синхронно или асинхронно

Он будет выполняться асинхронно, если у вас достаточно ядер, в противном случае он запускается независимо, но ваш stream будет вынужден переключиться на контекст, чтобы другая программа работала. В любом случае это не то, о чем вам нужно беспокоиться.

Только для полноты: когда я прихватил Swing jar из C #, я нашел эту деталь: если вы не установите рабочий каталог в объекте ProcessStartInfo, ваше блестящее приложение Swing запустится … но без значков и изображений !

Это минимальный рабочий код, скопированный из ответов здесь и в другом месте на SO (работает для меня: Java 1.8 на Win7, mi изображения и значки находятся в подпапке рабочего каталога):

 ProcessStartInfo psi = new ProcessStartInfo("java.exe", " -jar \"C:\\Program Files\\Installed Shiny Swing jar app\\Myjar.jar\""); psi.WorkingDirectory = "C:\\Program Files\\Installed Shiny Swing jar app\\"; // Do not miss this line so you awesome Swing app will show default java icon and no images psi.CreateNoWindow = true; psi.UseShellExecute = false; Process p = new Process(); p.StartInfo = psi; p.Start(); 

Возможно, он будет работать быстрее, если вы используете jni4net – C # / Java bridge

  • Как установить java.library.path из Eclipse
  • Невозможно скомпилировать простой проект Java 10 с Maven
  • Как запустить eclipse в чистом режиме? и что произойдет, если мы это сделаем?
  • Выполнение внешней программы в java
  • Переопределение метода java equals () - не работает?
  • Как обрабатывать всплывающие windows в Selenium WebDriver с помощью Java
  • Как установить DPI приложений Java Swing в Windows / Linux?
  • Проверьте, не является ли строка пустой и не пустой
  • Можем ли мы использовать регулярные выражения в шаблонах URL-адресов web.xml?
  • Как добавить MouseListener в элемент на Java Swing Canvas
  • JConsole через пересылку локального порта ssh
  • Давайте будем гением компьютера.