日期:2014-05-20  浏览次数:20789 次

调试发现一个诡异的问题,求破解思路
编译一个递归程序时出现堆栈溢出异常:

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楼的方法