1. 程式人生 > 實用技巧 >【隨手記錄】記一次Java StackOverflow

【隨手記錄】記一次Java StackOverflow

Java版本:

   JDK1.8.0_91(HotSpot(TM) 64-Bit Server VM)

系統環境:

   Mac OS 10.15.4

場景描述:

   用Java Swing寫了個CS版的套打小工具,實現了列印介面Printable的print方法,對於包含二維碼等圖片的列印,畫筆(Graphics)

g2.drawImage描繪圖片時候會報錯,錯誤資訊如下:
2020-08-21 18:43:52.360 java[29707:377294] Cocoa AWT: Not running on AppKit thread 0 when expected. (
	0   libosxapp.dylib                     0x000000012386a702 +[ThreadUtilities getJNIEnv] + 38
	1   libawt_lwawt.dylib                  0x0000000123b47e69 syncFromJavaPixels + 1842
	2   libawt_lwawt.dylib                  0x0000000123b482ff LockImage + 75
	3   libawt_lwawt.dylib                  0x0000000123b5ac4c Java_sun_java2d_CRenderer_doImage + 170
	4   ???                                 0x0000000112c21c64 0x0 + 4609678436
	5   ???                                 0x0000000112c0a33d 0x0 + 4609581885
)
2020-08-21 18:43:52.360 java[29707:377294] 	Please file a bug report at http://java.net/jira/browse/MACOSX_PORT with this message and a reproducible test case.
java.lang.StackOverflowError
	at sun.java2d.CRenderer.doImage(Native Method)
	at sun.java2d.OSXSurfaceData.blitImage(OSXSurfaceData.java:1027)
	at sun.java2d.CRenderer.blitImage(CRenderer.java:461)
	at sun.java2d.CRenderer.copyImage(CRenderer.java:474)
	at sun.java2d.CRenderer.copyImage(CRenderer.java:533)
	at sun.java2d.pipe.ValidatePipe.copyImage(ValidatePipe.java:186)
	at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3318)
	at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3296)
	at sun.print.ProxyGraphics2D.drawImage(ProxyGraphics2D.java:815)
問題處理:
  
看到 StackOverflowError 以為執行緒記憶體大小不夠(Xss) 或者 有大物件(圖片)沒釋放,把圖片解析度大小等都調低了還是報錯!
  查了下
StackOverflow 存在類似的問題:
  

   同時也在openjdk的Bugs系統找到了該問題對應的JDK-Bug記錄:

  試了下 在Window系統相同的JDK版本下 沒有這種問題