黑马程序员技术交流社区

标题: BeanUtils工具类的问题 [打印本页]

作者: 汪小照    时间: 2012-10-15 19:45
标题: BeanUtils工具类的问题
我在使用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, 下载次数: 53)

导入的Jar包

导入的Jar包

作者: 舒远    时间: 2012-10-16 10:42
本帖最后由 舒远 于 2012-10-16 11:51 编辑

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

}
这个方法。导致报错
作者: 汪小照    时间: 2012-10-16 11:19
舒远 发表于 2012-10-16 10:42
age属性是int类型。你在设置的时候传入了字符串“12”。通过反射无法找到
public String setAge(String ag ...

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

嗯,等你的回复。
作者: 陈军    时间: 2012-10-16 12:27
我运行了下,。。结果我的找不到那个类。
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
我上面的回答错了。字符串12或者数字12都是可以的。
你的程序无法运行是因为你的Person1类不是public的。
作者: 陈军    时间: 2012-10-16 13:08
汪小照 发表于 2012-10-16 12:18
嗯,等你的回复。

悲剧。。。我从Apache专门的网站上下载下来,都不对。老提示我找不到LogFactory类
作者: 舒远    时间: 2012-10-16 13:10
陈军 发表于 2012-10-16 13:08
悲剧。。。我从Apache专门的网站上下载下来,都不对。老提示我找不到LogFactory类 ...

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


恩,3Q。我看看
作者: 汪小照    时间: 2012-10-16 13:17
舒远 发表于 2012-10-16 12:32
我上面的回答错了。字符串12或者数字12都是可以的。
你的程序无法运行是因为你的Person1类不是public的。 ...

谢谢,问题解决了,的确需要将Person类单独放在一个文件,并用Public 修饰。
作者: 陈军    时间: 2012-10-16 13:20
实践了下。。的确需要public 才可以。。


作者: 汪小照    时间: 2012-10-16 13:20
舒远 发表于 2012-10-16 13:10
需要添加commons-logging-1.1.1.jar包。

包已经添加了的,是Person1修饰符的问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2