首页 > 解决方案 > 使用 JNI 调用 NSWindow

问题描述

我尝试使用 JNI 从 Java 调用 Swift 函数。我的 Swift 函数使用一些内容创建 NSWindow,它可以工作,但是当我从 Java 调用它时,我收到下一条消息: “NSWindow 拖动区域应该只在主线程上无效!这将在未来引发异常”和我的应用程序崩溃

我的快捷功能:

@_silgen_name("swiftHelloWorld")
public func swiftHelloWorld() {
    let delegate = AppDelegate()
    let application = NSApplication.shared
    application.setActivationPolicy(.regular)
    application.delegate = delegate
    application.run()
}

我的Java代码:

public class SwiftHelloWorld {

    static {
        System.loadLibrary("SwiftHelloWorld");
    }

    public static native void printHelloWorldImpl();

    public static void main(final String[] args) {
        printHelloWorldImpl();
    }
}

我的 C 代码:

#include <jni.h>
#include <stdio.h>
#include "helloworld_SwiftHelloWorld.h"
#include "helloworld_SwiftHelloWorld_swift.h"

JNIEXPORT void JNICALL Java_helloworld_SwiftHelloWorld_printHelloWorldImpl (JNIEnv *env, jclass clazz) {
    swiftHelloWorld();
    printf("%s", "Hello World from JNI!");
}

斯威夫特标题:

void swiftHelloWorld();

标签: javaswiftmacosjava-native-interface

解决方案


推荐阅读