Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

JavaClassWrapper

继承: Object

提供对 Java 原生接口的访问。

描述

JavaClassWrapper 单例为 Godot 应用程序提供了一种通过 Java 原生接口(JNI)发送和接收数据的方法。

注意:该单例仅适用于 Android 版本。

var LocalDateTime = JavaClassWrapper.wrap("java.time.LocalDateTime")
var DateTimeFormatter = JavaClassWrapper.wrap("java.time.format.DateTimeFormatter")

var datetime = LocalDateTime.now()
var formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")

print(datetime.format(formatter))

警告:调用 Java 方法时,请确保使用 get_exception() 检查该方法是否抛出了异常。

教程

方法

JavaObject

create_proxy(object: Object, interfaces: PackedStringArray)

JavaObject

create_sam_callback(sam_interface: String, callable: Callable)

JavaObject

get_exception()

JavaClass

wrap(name: String)


方法说明

JavaObject create_proxy(object: Object, interfaces: PackedStringArray) 🔗

创建一个实现指定 Java 接口的 JavaObject,并使用给定的 Object 作为具体实现。

object 必须包含与传入的 Java interfaces 中方法签名相匹配的方法签名。调用 Java interfaces 中的方法时,将路由至对应的 object 方法。

class PrintProxy:
    func println(content: String) -> void:
        print(content)

var print_proxy = PrintProxy.new()
var printer_object = JavaClassWrapper.create_proxy(print_proxy, ["android.util.Printer"])
printer_object.println("Hello Godot World!")

注意: 该方法仅适用于 Android 平台。在其他所有平台上,该方法始终返回 null


JavaObject create_sam_callback(sam_interface: String, callable: Callable) 🔗

创建一个实现 Java 单一抽象方法(SAM)接口的 JavaObject,并使用 Godot 的 Callable 作为具体实现。

sam_interface 必须是一个 Java SAM 接口,这意味着它必须仅包含一个需要实现的抽象方法。

callable 必须能够处理与 SAM 接口方法相同的参数类型,并提供相同的返回类型。该 callable 将作为回调被调用,并传入来自 Java SAM 接口方法的参数。

var cb = func (content: String) -> void:
    print(content)
var callback = JavaClassWrapper.create_sam_callback("android.util.Printer", cb)
callback.println("Hello Godot World!")

注意: 该方法仅适用于 Android 平台。在其他所有平台上,该方法始终返回 null


JavaObject get_exception() 🔗

返回最近一次调用 Java 类时产生的 Java 异常。如果没有产生异常则返回 null

注意:该方法仅在 Android 上有效。该方法在其他平台上始终返回 null


JavaClass wrap(name: String) 🔗

包装 Java 中定义的类,返回 Godot 可以与之交互的 Object 类型 JavaClass

包装内部(嵌套)类时请使用 $ 分隔,不要用 .。例如 WindowManager.LayoutParams 类应使用 JavaClassWrapper.wrap("android.view.WindowManager$LayoutParams") 进行包装。

注意:调用构造函数请调用与类同名的方法。例如:

var Intent = JavaClassWrapper.wrap("android.content.Intent")
var intent = Intent.Intent()

注意:该方法仅适用于 Android,在其他所有平台上都不会执行任何操作,返回的是空的 JavaClass