问一个java问题,下面代码为什么会报java.lang.IllegalArgumentException 这种异常哪 希望大神详细解答

importjava.awt.*;importjavax.swing.*;publicclassDrawCircleextendsJFrame{privatefinali... import java.awt.* ;
import javax.swing.* ;
public class DrawCircle extends JFrame {
private final int OVAL_WIDTH = 80 ;
private final int OVAL_HEIGHT = 80 ;

public DrawCircle(){
super();
initialize();

}

private void initialize (){
this.setSize(300,200) ;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(new DrawPanel());
this.setTitle("奥运五环");
//this.setVisible(true);
}

public static void main(String[]args){
new DrawCircle().setVisible(true);
}

private class DrawPanel extends JFrame{
public void paint(Graphics g){
super.paint(g);
g.drawOval(10, 10, OVAL_WIDTH ,OVAL_HEIGHT );
g.drawOval(80, 10, OVAL_WIDTH ,OVAL_HEIGHT );
g.drawOval(150, 10, OVAL_WIDTH ,OVAL_HEIGHT );
g.drawOval(50, 70, OVAL_WIDTH ,OVAL_HEIGHT );
g.drawOval(120, 70, OVAL_WIDTH ,OVAL_HEIGHT );

}
}
}
展开
 我来答
冰火两重天
2014-03-03 · TA获得超过1425个赞
知道小有建树答主
回答量:1489
采纳率:0%
帮助的人:992万
展开全部
Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.checkNotAWindow(Container.java:431)
at java.awt.Container.addImpl(Container.java:1039)
at javax.swing.JLayeredPane.addImpl(JLayeredPane.java:212)
at java.awt.Container.add(Container.java:927)
at javax.swing.JRootPane.setContentPane(JRootPane.java:608)
at javax.swing.JFrame.setContentPane(JFrame.java:671)
at DrawCircle.initialize(DrawCircle.java:18)
at DrawCircle.<init>(DrawCircle.java:11)
at DrawCircle.main(DrawCircle.java:24)

你为什么会设置contentPane为一个JFrame呢?

import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class DrawCircle extends JFrame {
private final int OVAL_WIDTH = 80;
private final int OVAL_HEIGHT = 80;

public DrawCircle() {
super();
initialize();

}

private void initialize() {
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(new DrawPanel());
this.setTitle("奥运五环");
// this.setVisible(true);
}

public static void main(String[] args) {
new DrawCircle().setVisible(true);
}

private class DrawPanel extends JPanel {
public void paint(Graphics g) {
super.paint(g);
g.drawOval(10, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(80, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(150, 10, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(50, 70, OVAL_WIDTH, OVAL_HEIGHT);
g.drawOval(120, 70, OVAL_WIDTH, OVAL_HEIGHT);

}
}
}

关于setContentPane()和getContentPane()的应用
------摘要:java_流子 Fab.19 2006-------- 
我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则会抛出异常——不信就试试。造成这个现象的原因只有一个解释:JFrame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?

  JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。

  对JFrame添加组件有两种方式:
  1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
  2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
    JpanelcontentPane=newJpanel();
    ……//把其它组件添加到Jpanel中;
    frame.setContentPane(contentPane);
    //把contentPane对象设置成为frame的内容面板

pqzhanga
2014-03-03 · TA获得超过636个赞
知道小有建树答主
回答量:488
采纳率:50%
帮助的人:423万
展开全部
这个异常是说参数不合法,如果能把异常信息全部贴出来就好找地方了,但是目测initialize方法中this.setContentPane(new DrawPanel())这里的问题,DrawPanel继承的是JFrame,在主体窗口DrawCircle里再添加一个窗口类,不但显示不出来,而且两个JFrame因为setContentPane方法产生了冲突,最直接的修改就是把private class DrawPanel extends JFrame改成private class DrawPanel extends JPanel,因为JPanel是面板,可以正常装载到JFrame里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leiqianlq
推荐于2017-11-26 · TA获得超过115个赞
知道小有建树答主
回答量:624
采纳率:0%
帮助的人:274万
展开全部
java 参数 异常 ,错误 在 this.setContentPane(new DrawPanel()); ,因为 你的 DrawPanel是一个 frame ,而 frame 是不能 放在 frame里面的,你可以 修改成 panel
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海蓝_爱埋
2014-03-03 · TA获得超过496个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:333万
展开全部
错误是参数不合法、具体错在哪一行?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式