A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 环球信息中心 中级黑马   /  2014-4-23 20:42  /  1186 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码Eclipse代码区不显示错误,但是运行代码的时候弹出了引用类的错误,不知道是我的文件损坏了,还是我代码有问题
代码如下:
package f1rame;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class JTextFieldTest extends JFrame{
public JTextFieldTest(){
  JPanel panel=new JPanel();
  JTextField field =new JTextField();
  field.setColumns(20);
  
  field.setHorizontalAlignment(JTextField.CENTER);
     field.setText("中对齐20栏");
     panel.add(field);
     field=new JTextField();
     field.setColumns(20);
     field.setText("左对齐边框20栏");
     field.setBorder(BorderFactory.createEmptyBorder());
     panel.add(field);
     field= new JTextField();
     field.setColumns(40);
     field.setHorizontalAlignment(JTextField.RIGHT);
     field.setFont(new Font("隶书",Font.BOLD,12));
     field.setText("右对齐不可编辑隶书加粗字体");
     field.setEditable(false);
     panel.add(field);
     JPasswordField pField=new JPasswordField(10);
     pField.setText("1234567");
     pField.add(pField);
     char[] password=pField.getPassword();
     String passwordStr=new String(password);
     field=new JTextField(8);
     field.setText(passwordStr);
     panel.add(field);
     setContentPane(panel);
     
}
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
JTextFieldTest test =new JTextFieldTest();
test.setSize(new Dimension(300,150));
test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
test.setVisible(true);
}
}
提示错误如下:
Exception in thread "main" java.lang.IllegalArgumentException: adding container's parent to itself
at java.awt.Container.checkAddToSelf(Container.java:420)
at java.awt.Container.addImpl(Container.java:1038)
at java.awt.Container.add(Container.java:365)
at f1rame.JTextFieldTest.<init>(JTextFieldTest.java:36)
at f1rame.JTextFieldTest.main(JTextFieldTest.java:50)

5 个回复

倒序浏览
  1. import java.awt.Dimension;
  2. import java.awt.Font;
  3. import javax.swing.BorderFactory;
  4. import javax.swing.JFrame;
  5. import javax.swing.JPanel;
  6. import javax.swing.JPasswordField;
  7. import javax.swing.JTextField;
  8. import javax.swing.WindowConstants;
  9. class JTextFieldTest extends JFrame
  10. {
  11.         public JTextFieldTest()
  12.         {
  13.                 JPanel panel=new JPanel();
  14.                 JTextField field =new JTextField();
  15.                 field.setColumns(20);
  16.                   
  17.                 field.setHorizontalAlignment(JTextField.CENTER);
  18.                 field.setText("中对齐20栏");
  19.                 panel.add(field);
  20.                 field=new JTextField();
  21.                 field.setColumns(20);
  22.                 field.setText("左对齐边框20栏");
  23.                 field.setBorder(BorderFactory.createEmptyBorder());
  24.                 panel.add(field);
  25.                 field= new JTextField();
  26.                 field.setColumns(40);
  27.                 field.setHorizontalAlignment(JTextField.RIGHT);
  28.                 field.setFont(new Font("隶书",Font.BOLD,12));
  29.                 field.setText("右对齐不可编辑隶书加粗字体");
  30.                 field.setEditable(false);
  31.                 panel.add(field);
  32.                 JPasswordField pField=new JPasswordField(10);
  33.                 pField.setText("1234567");
  34.                 //pField.add(pField); 向pField中添加了pField自己导致了错误。这一行注释掉就可以运行了。
  35.                 char[] password=pField.getPassword();
  36.                 String passwordStr=new String(password);
  37.                 field=new JTextField(8);
  38.                 field.setText(passwordStr);
  39.                 panel.add(field);
  40.                 setContentPane(panel);                 
  41.         }
  42. /**
  43.   * @param args
  44.   */
  45.         public static void main(String[] args)
  46.         {
  47.           // TODO Auto-generated method stub
  48.                 JTextFieldTest test =new JTextFieldTest();
  49.                 test.setSize(new Dimension(300,150));
  50.                 test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  51.                 test.setVisible(true);
  52.         }
  53. }
复制代码
回复 使用道具 举报
pField.add(pField);
这一行代码有问题
IllegalArgumentException 这个异常是非法数据异常,
后面说 增加的容器的父容器是它本身,然后再看下面最后两行说你的JTextFieldTest.java
这个类的36 和 50 行有错误 ,
50 行应该是Main方法吧,那先是错误向上抛到了Main方法还是没处理就报错了,
所以真正的错误就是在36行,你自己看一下行数改一下,
回复 使用道具 举报
从错误提示就能看出哪里出问题了:
java.lang.IllegalArgumentException: adding container's parent to itself
at f1rame.JTextFieldTest.<init>(JTextFieldTest.java:36)
at f1rame.JTextFieldTest.main(JTextFieldTest.java:50)
IllegalArgumentException说的是非法参数异常,adding container's parent to itself:给自己添加了容器的父类
错误发生的地方在<init>(JTextFieldTest.java:36)和main(JTextFieldTest.java:50),分别位于36行和主函数里的50行。也就是pField.add(pField);  还有JTextFieldTest test =new JTextFieldTest();出错了。
出错的原因是pField.add(pField);  自己添加自己是不可以的。这里的错误导致了主函数里50行的错误。修改程序如下
  1. package learn;

  2. import java.awt.Dimension;
  3. import java.awt.Font;
  4. import javax.swing.BorderFactory;
  5. import javax.swing.JFrame;
  6. import javax.swing.JPanel;
  7. import javax.swing.JPasswordField;
  8. import javax.swing.JTextField;
  9. import javax.swing.WindowConstants;
  10. public class JTextFieldTest extends JFrame{
  11. public JTextFieldTest(){
  12.   JPanel panel=new JPanel();
  13.   JTextField field =new JTextField();
  14.   field.setColumns(20);
  15.   
  16.   field.setHorizontalAlignment(JTextField.CENTER);
  17.      field.setText("中对齐20栏");
  18.      panel.add(field);
  19.      field=new JTextField();
  20.      field.setColumns(20);
  21.      field.setText("左对齐边框20栏");
  22.      field.setBorder(BorderFactory.createEmptyBorder());
  23.      panel.add(field);
  24.      field= new JTextField();
  25.      field.setColumns(40);
  26.      field.setHorizontalAlignment(JTextField.RIGHT);
  27.      field.setFont(new Font("隶书",Font.BOLD,12));
  28.      field.setText("右对齐不可编辑隶书加粗字体");
  29.      field.setEditable(false);
  30.      //panel.add(field);                      这一句出错了,不知道有什么用,直接注释了就可以运行了
  31.      JPasswordField pField=new JPasswordField(10);
  32.      pField.setText("1234567");
  33.      pField.add(pField);
  34.      char[] password=pField.getPassword();
  35.      String passwordStr=new String(password);
  36.      field=new JTextField(8);
  37.      field.setText(passwordStr);
  38.      panel.add(field);
  39.      setContentPane(panel);
  40.      
  41. }
  42. /**
  43.   * @param args
  44.   */
  45. public static void main(String[] args) {
  46.   // TODO Auto-generated method stub
  47. JTextFieldTest test =new JTextFieldTest();
  48. test.setSize(new Dimension(300,150));
  49. test.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  50. test.setVisible(true);
  51. }
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
回复 使用道具 举报
sheng6699 发表于 2014-4-23 21:01
pField.add(pField);
这一行代码有问题
IllegalArgumentException 这个异常是非法数据异常,

谢谢了。:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马