Java

c#调用java 能否实现回调

小樊
83
2024-11-29 13:55:50
栏目: 编程语言

是的,C# 可以调用 Java 并实现回调。为了实现这一点,你需要使用一个通用的接口来在 C# 和 Java 之间传递数据和方法。这里是一个简单的示例,展示了如何使用 C# 调用 Java 类并使用回调:

  1. 首先,创建一个 Java 类,该类包含一个方法,该方法将作为回调传递给 C# 代码:
// JavaClass.java
public class JavaClass {
    public interface Callback {
        void onResult(String result);
    }

    public void doSomething(Callback callback) {
        // 执行一些操作...
        String result = "Hello from Java!";
        callback.onResult(result);
    }
}
  1. 编译 Java 类并生成一个 JAR 文件:
javac JavaClass.java
jar cvf JavaClass.jar JavaClass.class
  1. 在 C# 代码中,使用 Java.Interop 库加载 Java 类并调用其方法。首先,确保在项目中添加了 Java.Interop NuGet 包。然后,创建一个回调接口并在 C# 代码中使用它:
using System;
using Java.Interop;

// 定义一个与 Java 回调接口相对应的 C# 接口
public interface ICallback {
    void OnResult(string result);
}

public class Program {
    public static void Main() {
        // 加载 Java 类
        var env = JniEnvironment.Create();
        var clazz = env.FindClass("JavaClass");

        // 创建 Java 对象
        var javaObject = env.NewObject(clazz, "JavaClass");

        // 创建 C# 回调对象
        ICallback callback = new CallbackImpl();

        // 将 C# 回调对象传递给 Java 方法
        env.CallVoidMethod(javaObject, "doSomething", callback);

        // 在 C# 中处理回调结果
        callback.OnResult("Hello from Java!");
    }
}

// 实现 C# 回调接口
public class CallbackImpl : ICallback {
    public void OnResult(string result) {
        Console.WriteLine($"Callback result: {result}");
    }
}

在这个示例中,我们首先创建了一个 Java 类 JavaClass,其中包含一个回调接口 Callback。然后,我们在 C# 中创建了一个与 Java 回调接口相对应的接口 ICallback,并实现了它。最后,我们加载了 Java 类,创建了一个 Java 对象,并将 C# 回调对象传递给 Java 方法。当 Java 方法完成执行时,C# 回调将被调用,我们可以在其中处理结果。

0
看了该问题的人还看了