简体   繁体   English

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

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

I'm trying to draw some points on my view using a canvas. 我正在尝试使用画布在视图上绘制一些点。 But as soon i try to draw my canvas on my view with 但是,一旦我尝试用

 view.draw(canvas);

I get the error java.lang.StackOverflowError: stack size 8MB and then my app crash immediately. 我收到错误java.lang.StackOverflowError: stack size 8MB ,然后我的应用程序立即崩溃。 Does someone has an idea how i can reduce the size of my canvas or fix this error ? 有人知道我如何缩小画布尺寸或修复此错误吗?

Here is my current code : 这是我当前的代码:

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());
                    }


                }
            };

Thank you 谢谢

The line you mentioned calls view.draw(canvas); 您提到的view.draw(canvas);行调用view.draw(canvas); This calls your onDrawListener , which calls view.draw(canvas) , which calls your onDrawListener , which calls view.draw(canvas) , and so on... 这将调用您的onDrawListener ,后者调用view.draw(canvas) ,后者调用您的onDrawListener ,后者调用view.draw(canvas) ,依此类推...

Every time a function calls another function, it passes data to the function it is calling through a "stack frame". 每次一个函数调用另一个函数时,它都会通过“堆栈帧”将数据传递给正在调用的函数。 This takes space in memory, and each stack frame gets freed when the function it is associated with returns. 这会占用内存空间,并且当与它关联的函数返回时,每个堆栈帧都会被释放。 Since your onDrawListener calls itself, it will never return, and that memory will keep getting used, until there is none left. 由于您的onDrawListeneronDrawListener调用,因此它将永远不会返回,并且该内存将一直被使用,直到没有剩余的内存为止。

Remove the line you highlighted, and, assuming no other issues are present, it should work. 删除突出显示的行,并假设没有其他问题,则该行应该起作用。

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

相关问题 stack = java.lang.StackOverflowError:堆栈大小8MB - stack=java.lang.StackOverflowError: stack size 8MB 错误java.lang.StackOverflowError:堆栈大小8MB - Error java.lang.StackOverflowError: stack size 8MB java.lang.StackOverflowError:视图中的堆栈大小为8MB - java.lang.StackOverflowError: stack size 8MB in Views java.lang.StackOverflowError:堆栈大小8MB - java.lang.StackOverflowError: stack size 8MB Android Firebase java.lang.StackOverflowError:用户上传图像时堆栈大小 8MB 错误 - Android Firebase java.lang.StackOverflowError: stack size 8MB error when user is uploading an image 值动画制作器中的循环会导致java.lang.StackOverflowError崩溃:堆栈大小8MB - Loop in value animator cause in crash with java.lang.StackOverflowError: stack size 8MB java.lang.StackOverflowError:android studio上的堆栈大小为8MB。 怎么解决? - java.lang.StackOverflowError: stack size 8MB on android studio. How to solve it? 称为递归onResume活动java.lang.StackOverflowError的方法:堆栈大小8MB - Method called recursive onResume Activity java.lang.StackOverflowError: stack size 8MB Android Firebase实时异常java.lang.StackOverflowError:堆栈大小8MB - Android Firebase Realtime Exception java.lang.StackOverflowError: stack size 8MB 为什么我的代码中会出现java.lang.StackOverflowError? - Why am I getting java.lang.StackOverflowError in my code?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM