繁体   English   中英

画画布时出现java.lang.StackOverflowError:堆栈大小8MB

[英]I get java.lang.StackOverflowError: stack size 8MB when i draw my canvas

我正在尝试使用画布在视图上绘制一些点。 但是,一旦我尝试用

 view.draw(canvas);

我收到错误java.lang.StackOverflowError: stack size 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);行调用view.draw(canvas); 这将调用您的onDrawListener ,后者调用view.draw(canvas) ,后者调用您的onDrawListener ,后者调用view.draw(canvas) ,依此类推...

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

删除突出显示的行,并假设没有其他问题,则该行应该起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM