Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在绘制画布时得到java.lang.StackOverflower错误:堆栈大小为8MB_Java_Android_Android Canvas - Fatal编程技术网

我在绘制画布时得到java.lang.StackOverflower错误:堆栈大小为8MB

我在绘制画布时得到java.lang.StackOverflower错误:堆栈大小为8MB,java,android,android-canvas,Java,Android,Android Canvas,我试图用画布在我的观点上画一些观点。 但当我试图用我的眼睛画我的画布时 view.draw(canvas); 我得到错误java.lang.StackOverflower错误:堆栈大小8MB,然后我的应用程序立即崩溃。 有人知道如何缩小画布的大小或修复此错误吗 这是我目前的代码: onDrawListener = new OnDrawListener() { @Override public void onLayerDrawn(

我试图用画布在我的观点上画一些观点。 但当我试图用我的眼睛画我的画布时

 view.draw(canvas);
我得到错误
java.lang.StackOverflower错误:堆栈大小8MB
,然后我的应用程序立即崩溃。 有人知道如何缩小画布的大小或修复此错误吗

这是我目前的代码:

onDrawListener = new OnDrawListener() {
                @Override
                public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
                    try {
                        Log.d("PdfViewer", "Drawing view");
                        Paint paint = new Paint();
                        paint.setColor(Color.RED);
                        canvas.drawPoint(canvas.getWidth() /2, canvas.getHeight() /2, paint);
                        view.draw(canvas); //here i get the error
                    } catch (Exception e) {
                        Log.d("PdfViewer", e.toString());
                    }


                }
            };

谢谢你

你提到的那行调用了
view.draw(canvas)
这将调用您的
ondrawstener
,它调用
view.draw(canvas)
,它调用您的
ondrawstener
,它调用
view.draw(canvas)
,依此类推

每次函数调用另一个函数时,它都会通过“堆栈帧”将数据传递给正在调用的函数。这会占用内存空间,当与堆栈帧关联的函数返回时,每个堆栈帧都会被释放。由于您的
onDrawListener
调用自身,它将永远不会返回,并且该内存将一直被使用,直到没有剩余内存


删除突出显示的行,并且假设不存在其他问题,它应该可以工作。

这很可能意味着您有一个永恒的递归。你确定你的抽签电话不会导致它自己呼叫吗?崩溃时的调用堆栈是什么?当我删除该行时,我没有收到更多错误,但我的nothing在画布上绘制,你知道为什么吗?我不是这个图形库的专家,但基于命名约定,我想象每当你调用view.draw(画布)时,onDrawListener都会被调用。因此,绘制画布的代码应该在侦听器之外,可能在初始化方法中,除非这是您希望“每当有东西绘制到画布时”发生的代码