编译一个递归程序时出现堆栈溢出异常:
Exception in thread "main" java.lang.StackOverflowError
at java.awt.image.ComponentColorModel.getRGBComponent(ComponentColorModel.java:880)
at java.awt.image.ComponentColorModel.getRed(ComponentColorModel.java:927)
at java.awt.image.ComponentColorModel.getRGB(ComponentColorModel.java:1113)
at java.awt.image.BufferedImage.getRGB(BufferedImage.java:871)
at ImageRegulator.prob(ImageRegulator.java:235)
...
ImageRegulator.java:235对应的代码是:
tmpColor = (this.sourceImage.getRGB(currentPoint.x,currentPoint.y)) & (0x00ffffff);
为了查看错误原因,我用try catch把这句话包起来,并打印当时的坐标值。
try{
tmpColor = (this.sourceImage.getRGB(currentPoint.x,currentPoint.y)) & (0x00ffffff);
}
catch(Exception e){
System.out.println(currentPoint.x + "," + currentPoint.y);
System.out.println(e.getStackTrace());
}
诡异的事情发生了,异常居然没有被捕获!然后我在第一条打印语句那里打了个断点,再debug的时候居然运行正常了,异常自己消失了!然后我又实验了一下,我在这段代码的任何地方加断点运行都不会出错。
这是什么情况?
1 异常为什么没有被捕获?
2 为什么打断点会导致异常消失?
------解决方案--------------------
很奇怪。很奇怪。
------解决方案--------------------
Throwable看看
------解决方案--------------------
这是个error不是exception你怎么能用exception捕获,我得观点被楼上说了

------解决方案--------------------
Jvm的异常和普通的exception是不一样的,通过catch是无法捕捉的,试试2楼的方法