我是Kotlin的新手。init
块this
中是否存在并且具有正确的类型,但是当我尝试访问它时,它将引发空指针异常?
class GameGLSurface(context: Context,attrs:AttributeSet): GLSurfaceView(context,attrs) {
val renderer:GLRenderer= GLRenderer(context,this)
init {
println("surface exists:${this!=null},${this is GLSurfaceView}")// says true,true
this.renderMode= RENDERMODE_CONTINUOUSLY //throws NPE
setRenderer(renderer)
}
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GameGLSurface
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/gl_surface"/>
</FrameLayout>
答案 0 :(得分:2)
您必须先设置渲染器:
class GameGLSurface(context: Context,attrs:AttributeSet): GLSurfaceView(context,attrs) {
val renderer:GLRenderer= GLRenderer(context,this)
init {
println("surface exists:${this!=null},${this is GLSurfaceView}")// says true,true
setRenderer(renderer)
this.renderMode= RENDERMODE_CONTINUOUSLY //throws NPE
}
}
应该工作
答案 1 :(得分:0)
不是由于未创建GlSurface
而导致NPE,而是由于尚未设置渲染器,因此未创建更新曲面的线程。
解决方案是先设置渲染器,然后更改renderMode
init {
setRenderer(renderer)
renderMode= RENDERMODE_CONTINUOUSLY
}
严重错误