【随手记录】记一次Java StackOverflow
Java版本:
JDK 1.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版本下 没有这种问题😓