gpt4 book ai didi

java - 我得到 java.lang.StackOverflowError : stack size 8MB when i draw my canvas

转载 作者:行者123 更新时间:2023-12-02 09:39:28 26 4
gpt4 key购买 nike

我正在尝试使用 Canvas 在我的 View 上绘制一些点。但一旦我尝试用

在我的 View 上绘制 Canvas
 view.draw(canvas);

我收到错误java.lang.StackOverflowError: stack size 8MB,然后我的应用程序立即崩溃。有人知道如何减小 Canvas 的大小或修复此错误吗?

这是我当前的代码:

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); 这会调用您的 onDrawListener,后者又调用 view.draw(canvas),它调用您的 onDrawListener,它调用 view.draw(canvas),依此类推...

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

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

关于java - 我得到 java.lang.StackOverflowError : stack size 8MB when i draw my canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57219654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com