ANativeWindow_fromSurface(env,surface) 总是 returns null
ANativeWindow_fromSurface(env,surface) always returns null
我正在尝试将表面从片段传递到我的本机代码。
但是当我使用 ANativeWindow_fromSurface(env,surface);
创建时,ANativeWindow 始终为 null
我正在使用 kotlin 而不是 java。
我从片段中的 onViewCreated() 函数调用本机函数:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
surfaceView = view.findViewById(R.id.surfaceView)
surface = surfaceView.holder.surface
myClass = MyClass()
myClass.myFunction(surface)
}
我的class:
class MyClass{
init {
System.loadLibrary("nativeLib")
}
external fun myFunction(surface: Surface): Int
}
这是我的 native.cpp :
extern "C"
JNIEXPORT jint JNICALL
Java_com_my_app_MyClass_myFunction(JNIEnv *env,jobject obj,jobject surface){
nativeWindow = ANativeWindow_fromSurface(env,surface);
if(nativeWindow == nullptr){
ALOG("nativeWindow is null");
return -1;
}
}
当我安装我的应用程序时,它显示 nativeWindow 为空。
为什么它是空的?
谁能建议我解决这个问题?
终于找到解决办法了!!
我将 myClass.myFunction() 调用移动到 SurfaceHolder.Callback{} 。
现在看起来像这样:
override fun surfaceCreated(p0: SurfaceHolder) {
object : Thread(){
override fun run() {
myClass.myFunction(surface)
}
}.start()
}
我正在尝试将表面从片段传递到我的本机代码。
但是当我使用 ANativeWindow_fromSurface(env,surface);
创建时,ANativeWindow 始终为 null我正在使用 kotlin 而不是 java。
我从片段中的 onViewCreated() 函数调用本机函数:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
surfaceView = view.findViewById(R.id.surfaceView)
surface = surfaceView.holder.surface
myClass = MyClass()
myClass.myFunction(surface)
}
我的class:
class MyClass{
init {
System.loadLibrary("nativeLib")
}
external fun myFunction(surface: Surface): Int
}
这是我的 native.cpp :
extern "C"
JNIEXPORT jint JNICALL
Java_com_my_app_MyClass_myFunction(JNIEnv *env,jobject obj,jobject surface){
nativeWindow = ANativeWindow_fromSurface(env,surface);
if(nativeWindow == nullptr){
ALOG("nativeWindow is null");
return -1;
}
}
当我安装我的应用程序时,它显示 nativeWindow 为空。 为什么它是空的? 谁能建议我解决这个问题?
终于找到解决办法了!!
我将 myClass.myFunction() 调用移动到 SurfaceHolder.Callback{} 。
现在看起来像这样:
override fun surfaceCreated(p0: SurfaceHolder) {
object : Thread(){
override fun run() {
myClass.myFunction(surface)
}
}.start()
}