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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪小照 中级黑马   /  2012-10-15 19:45  /  2416 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我在使用BeanUtils工具类时抛出了异常,麻烦看一下是什么原因?
代码如下:
package cn.itcast.introspector;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
/*
* BeanUtils和PropertyUtils工具类的应用
*/
import org.apache.commons.beanutils.*;
public class BeanUtilsTest {
public static void main(String [] args) throws Exception
{
  Person1 p = new Person1();
  BeanUtils.setProperty(p, "age","12" );
  String retVal = BeanUtils.getProperty(p, "age");
  System.out.println(retVal);
  
}
}
//一个标准的javabean类
class Person1{
private String name;
private int age;
private Date birthday;
private int y;

public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}
public Date getBirthday() {
  return birthday;
}
public void setBirthday(Date birthday) {
  this.birthday = birthday;
}
}
导入第三方jar包

我已经成功导入第三方jar包,为甚么还是会抛出异常?
异常信息:
Exception in thread "main" java.lang.reflect.InvocationTargetException: Cannot set age
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1017)
at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
at cn.itcast.introspector.BeanUtilsTest.main(BeanUtilsTest.java:14)
Caused by: java.lang.NoSuchMethodException: Property 'age' has no setter method in class 'class cn.itcast.introspector.Person1'
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2128)
at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1948)
at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2054)
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1015)
... 2 more

1.jpg (9.4 KB, 下载次数: 55)

导入的Jar包

导入的Jar包

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
舒远 黑马帝 2012-10-16 10:42:58
沙发
本帖最后由 舒远 于 2012-10-16 11:51 编辑

age属性是int类型。你在设置的时候传入了字符串“12”。通过反射无法找到
public void setAge(String age){

}
这个方法。导致报错
回复 使用道具 举报
舒远 发表于 2012-10-16 10:42
age属性是int类型。你在设置的时候传入了字符串“12”。通过反射无法找到
public String setAge(String ag ...

BeanUtils这个工具类在设置属性的时候本来就是设置字符串,它会再内部赋值时转化成int类型。
再说,即使把"12"改成12,运行时也会抛异常。
回复 使用道具 举报
你这个我还没看出问题。。我测试下再说
回复 使用道具 举报
陈军 发表于 2012-10-16 11:42
你这个我还没看出问题。。我测试下再说

嗯,等你的回复。
回复 使用道具 举报
我运行了下,。。结果我的找不到那个类。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:157)
        at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:117)
        at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:68)
        at org.apache.commons.beanutils.ContextClassLoaderLocal.get(ContextClassLoaderLocal.java:153)
        at org.apache.commons.beanutils.BeanUtilsBean.getInstance(BeanUtilsBean.java:80)
        at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:456)
        at basic.program.test.Basic5.main(Basic5.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more
继续看看
回复 使用道具 举报
舒远 黑马帝 2012-10-16 12:32:43
7#
我上面的回答错了。字符串12或者数字12都是可以的。
你的程序无法运行是因为你的Person1类不是public的。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
陈军 中级黑马 2012-10-16 13:08:30
8#
汪小照 发表于 2012-10-16 12:18
嗯,等你的回复。

悲剧。。。我从Apache专门的网站上下载下来,都不对。老提示我找不到LogFactory类
回复 使用道具 举报
舒远 黑马帝 2012-10-16 13:10:05
9#
陈军 发表于 2012-10-16 13:08
悲剧。。。我从Apache专门的网站上下载下来,都不对。老提示我找不到LogFactory类 ...

需要添加commons-logging-1.1.1.jar包。
回复 使用道具 举报
陈军 中级黑马 2012-10-16 13:11:51
10#

本帖最后由 陈军 于 2012-10-16 13:16 编辑
舒远 发表于 2012-10-16 13:10
需要添加commons-logging-1.1.1.jar包。


恩,3Q。我看看
回复 使用道具 举报
舒远 发表于 2012-10-16 12:32
我上面的回答错了。字符串12或者数字12都是可以的。
你的程序无法运行是因为你的Person1类不是public的。 ...

谢谢,问题解决了,的确需要将Person类单独放在一个文件,并用Public 修饰。
回复 使用道具 举报
陈军 中级黑马 2012-10-16 13:20:05
12#
实践了下。。的确需要public 才可以。。

回复 使用道具 举报
舒远 发表于 2012-10-16 13:10
需要添加commons-logging-1.1.1.jar包。

包已经添加了的,是Person1修饰符的问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马