Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#执行Java程序?_C#_Java - Fatal编程技术网

如何从C#执行Java程序?

如何从C#执行Java程序?,c#,java,C#,Java,想知道是否有人知道在运行时从C代码执行Java命令行程序的好方法 它是否与执行本机.EXE文件相同 它是同步运行还是异步运行(这意味着我可能需要等待线程完成才能找到结果) 具体地说,我想从服务器端的web应用程序调用一个小实用程序(碰巧是用Java编写的),对文本文件进行一些处理。我想等待它完成,因为Java程序处理完文本文件后,我想获取处理后的文本,并在C#应用程序中使用它。这与执行本机.EXE文件相同,只是您必须执行的可执行文件是JVM本身(Java.EXE) 因此,在您的C代码调用中: j

想知道是否有人知道在运行时从C代码执行Java命令行程序的好方法

它是否与执行本机.EXE文件相同

它是同步运行还是异步运行(这意味着我可能需要等待线程完成才能找到结果)


具体地说,我想从服务器端的web应用程序调用一个小实用程序(碰巧是用Java编写的),对文本文件进行一些处理。我想等待它完成,因为Java程序处理完文本文件后,我想获取处理后的文本,并在C#应用程序中使用它。

这与执行本机.EXE文件相同,只是您必须执行的可执行文件是JVM本身(Java.EXE)

因此,在您的C代码调用中:

java.exe-yourJavaProgram.jar的jar名称

你应该没事的

如果JAR库中没有java程序,只需使用所需的所有参数启动JVM即可

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();
它是同步运行还是异步运行


如果您有足够的内核,它将异步运行,否则它将独立运行,但您的线程必须切换上下文,以便其他程序运行。无论如何,这不是你需要担心的事情。

< P>如果你需要比启动一个外部程序更精细的控制,那么考虑IKVM——它提供了一个在.NET世界中运行java程序的方法。

< P>如果使用

< P>它可能运行得更快。我想从Silverlight应用程序调用一个Web服务,该应用程序在服务器上使用java处理一些文件。上面的解决方案很有帮助,但我做了一点修改,使其能够工作,因为通过web服务进行调用有点棘手。现在您有了适合这项工作的工具,在适当的时候使用C,在C无法解决问题的时候使用Java。知道不止一种做事方式总是好的。现在,我在.Net中创建的Web服务可以与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();
}
为了完整起见: 从C#启动Swing jar时,我发现了以下细节:如果不在ProcessStartInfo对象中设置工作目录,您闪亮的Swing应用程序将启动但没有图标和图像

这是从这里和其他地方复制的最小工作代码(适用于我:Win7上的Java 1.8,mi图像和图标位于workingDirectory的子文件夹中):


还请注意,如果您需要从JVM返回一些东西,您可以调用一个DLL。这个工具非常好!!我坐在项目中,从Java和.Net前端应用程序访问大量数据,解决了我所有的问题!有人知道这个项目是否已经结束了吗?2012年似乎是最后一次更新,只有v7。。。非V8项目由负责人确认developer@Alexander不,他只是不想再做了。如果其他人愿意,他们可以。“显然没有人这样做。”托比约恩·拉文·安徒生通常这种情况被认为是死路一条。。。
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();