Java实现图片编辑创建BufferedImage时出现StackOverflowError栈溢出错误
问题根因
你遇到的StackOverflowError是无限递归调用导致的,两个方法形成了没有出口的循环调用链:
- 进入
getFile()方法,文件存在时触发第27行的bufferedImage()调用 - 进入
bufferedImage()方法,又触发第35行的getFile(inputPath)调用
循环往复没有终止条件,最终栈内存被占满抛出溢出错误。
除此之外你getFile()方法中的while(true)也没有设置退出逻辑,就算没有互相调用的问题,只要文件存在,代码就会永远卡在这里死循环。
修复方案
你需要先理清每个方法的职责边界,避免交叉循环调用:
getInputPath:仅负责接收用户输入的图片路径,调用校验逻辑确认路径有效getFile:仅负责校验路径合法性,有效则返回对应File对象,无效则抛出异常bufferedImage:仅负责接收File对象,读取并返回BufferedImage实例
修改后的参考代码如下:
private Scanner sc; private String inputPath = null; public String getInputPath() throws Exception { System.out.println("Please enter the path to the picture you wish to edit."); sc = new Scanner(System.in); inputPath = sc.next(); // 拿到有效File对象后直接调用读取图片逻辑 File validFile = getFile(inputPath); bufferedImage(validFile); return inputPath; } private File getFile(String inputPath) throws Exception{ File f = new File(inputPath); if (!f.exists()){ throw new Exception("Invalid file name!"); } // 校验通过直接返回文件对象 return f; } public void bufferedImage(File f) throws Exception { BufferedImage bi = ImageIO.read(f); System.out.println(bi); }
内容的提问来源于stack exchange,提问作者Cian Martyn
相关产品推荐
相关产品推荐

