在Java中调用C#代码时,可以使用Java Native Interface (JNI) 或者 Java Native Access (JNA) 库。这里我们将使用JNI作为示例来处理异常。
首先,创建一个C#类库项目并添加以下代码:
using System; namespace CSharpLibrary { public class MyClass { [return: MarshalAs(UnmanagedType.LPWStr)] public string MyMethod() { try { throw new Exception("这是一个C#异常"); } catch (Exception ex) { return "捕获到异常: " + ex.Message; } } } }
接下来,创建一个Java项目并添加以下代码:
public class JavaCallCSharp { static { System.loadLibrary("csharp_library"); } public static void main(String[] args) { CSharpLibrary.MyClass myClass = new CSharpLibrary.MyClass(); String result = myClass.MyMethod(); System.out.println(result); } }
在这个例子中,我们使用JNI加载C#库(csharp_library),然后创建一个C#类的实例并调用其方法。如果在C#方法中发生异常,它将被捕获并转换为一个字符串,然后返回给Java代码。
注意:在运行此示例之前,请确保已正确配置C#和Java项目的环境,并生成了JNI头文件。具体步骤如下:
- 编译C#类库项目,生成DLL文件(csharp_library.dll)。
- 使用Java的
javah
工具生成JNI头文件:javah -jni CSharpLibrary.MyClass
。 - 将生成的JNI头文件与Java代码一起编译,并确保DLL文件在Java库路径中。
这样,当Java代码调用C#方法时,任何在C#方法中抛出的异常都将被捕获并转换为字符串返回给Java代码。