簡體   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