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