日期:2014-05-18  浏览次数:20685 次

内存溢出
import java.awt.*;
public class ChatClient extends Frame{
public static void main(String[] args) {
new ChatClient().show();
}
public void show(){
setLocation(400, 400);
this.setSize(200, 200);
setVisible(true);
}
}
报错为:Exception in thread "main" java.lang.StackOverflowError
at java.awt.Component.reshape(Component.java:2076)
at java.awt.Window.reshape(Window.java:808)
at java.awt.Component.setBounds(Component.java:2065)
at java.awt.Window.setBounds(Window.java:3155)
at java.awt.Component.move(Component.java:1934)
at java.awt.Component.setLocation(Component.java:1923)
at ChatClient.show(ChatClient.java:7)
at java.awt.Component.show(Component.java:1516)
at java.awt.Component.setVisible(Component.java:1468)
at java.awt.Window.setVisible(Window.java:841)
at ChatClient.show(ChatClient.java:9)
但是把程序中的show()方法改个名字就不报错了,为什么呢

------解决方案--------------------
public void show()
这个方法,是component里面已经有的方法,你这样写就是重载了
又在里面调用了setVisible,
看下源代码,setVisible会调用show()这个方法,
然后就成了死递归...show又去调用setVisible

建议你如果不是有意要复写show()的话,
方法名改成show1什么的就好了

------解决方案--------------------
引用:
public void show()
这个方法,是component里面已经有的方法,你这样写就是重载了
又在里面调用了setVisible,
看下源代码,setVisible会调用show()这个方法,
然后就成了死递归...show又去调用setVisible

建议你如果不是有意要复写show()的话,
方法名改成show1什么的就好了

解析的很好,一看就是show方法重载问题