Swing ----ImageIcon问题

占山 发布于 2011/07/24 10:55
阅读 1K+
收藏 1
//*在JFrame中构建来自本地图片的Icon 程序如下 已经把imageButton.jpg 放在了swing_ 包内和class MyImageIcon的位置 求达人解答什么原因*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package swing_;

import java.awt.Container;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class MyImageIcon extends JFrame {

/**
* @param args
*/
public MyImageIcon(){
MyImageIcon jf=new MyImageIcon();
Container container=jf.getContentPane();
URL url=MyImageIcon.class.getResource("imageButton.jpg");
Icon icon=new ImageIcon(url);
JLabel jl=new JLabel("icon from image",icon,SwingConstants.CENTER);
container.add(jl);
jf.setSize(500, 600);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyImageIcon();
}

}
///////////////////////////////////////////////////////////////////////////////////////////////
/*错误提示
Exception in thread "main" java.lang.StackOverflowError
at sun.awt.windows.WToolkit.getScreenInsets(Native Method)
at sun.awt.windows.WToolkit.getScreenInsets(WToolkit.java:549)
at java.awt.Window.init(Window.java:395)
at java.awt.Window.<init>(Window.java:433)
at java.awt.Frame.<init>(Frame.java:403)
at java.awt.Frame.<init>(Frame.java:368)
at javax.swing.JFrame.<init>(JFrame.java:158)
at swing_.MyImageIcon.<init>(MyImageIcon.java:18)
at swing_.MyImageIcon.<init>(MyImageIcon.java:19)
at swing_.MyImageIcon.<init>(MyImageIcon.java:19)
at swing_.MyImageIcon.<init>(MyImageIcon.java:19)
at swing_.MyImageIcon.<init>(MyImageIcon.java:19)
.......还有好多
*/
加载中
0
老盖
老盖
改成 URL url=MyImageIcon.class.getResource("/imageButton.jpg");
0
占山
占山
还是一样的错误 不知道为什么
0
子木007
子木007

java.lang.StackOverflowError

图片太大了吧

0
占山
占山

不大啊 就是一个小图标

0
金茧
金茧
package swing_;

import java.awt.Container;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

public class MyImageIcon extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * @param args
	 */
	public MyImageIcon() {
		Container container = this.getContentPane();
		URL url = MyImageIcon.class.getResource("imageButton.jpg");
		Icon icon = new ImageIcon(url);
		JLabel jl = new JLabel("icon from image", icon, SwingConstants.CENTER);
		container.add(jl);
		this.setSize(1000,800);
		this.setVisible(true);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyImageIcon();
	}

}

正确答案在此。哥们,求你不要在构造函数里面,调用自己来构造自己好不。

你看看这个代码是不是很不真实。

public MyImageIcon(){ 
MyImageIcon jf=new MyImageIcon(); 
Container container=jf.getContentPane(); 
URL url=MyImageIcon.class.getResource("imageButton.jpg"); 
Icon icon=new ImageIcon(url); 
JLabel jl=new JLabel("icon from image",icon,SwingConstants.CENTER); 
container.add(jl); 
jf.setSize(500, 600); 
jf.setVisible(true); 
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 


} 

你在自己的构造函数里面,调用自己的构造函数,你认为对么?我想你真实的想法应该是用this吧。

返回顶部
顶部