java.lang.NoSuchFieldException: resourceEntries

本文详细阐述了使用不同版本的Tomcat(7.0与8.0)导致Eclipse中导入项目时出现NoSuchFieldException错误及404报错的解决方法。通过调整Eclipse配置文件,删除不匹配的Tomcat版本信息,成功解决了资源加载问题。

1.java.lang.NoSuchFieldException: resourceEntries

tomcat8.0的类加载器webappclsaaLoader中没有属性resourceEntries,于是我换了tomcat7.0的看了下,7.0的有属性resourceEntries,实力一下,居然好了,没有异常了,是tomcat版本的问题


2.eclipse中的导入项目报错

1)jrelibrary版本

2)tomcat版本

3)eclipse error pages

进入项目包下的.settings目录,找到org.eclipse.wst.common.project.facet.core.xml文件,用记事本打开后看到 runtime name="Apache Tomcat v6.0"。我eclipse中设置的tomcat是7.0版本的,然后把这句话删掉就好了


3.action 404

后面有没有少action的后缀?action类中是否 有execute()方法?action类有没有继承 ActionSupport 类?


这个异常 `java.lang.NoSuchFieldException: fuid` 表示你的 Java 程序试图通过反射访问一个名为 `fuid` 的字段(field),但该字段在目标类中并不存在。 ### 可能的原因: 1. **拼写错误或字段名不一致**:你尝试访问的字段名 `fuid` 实际上在类中可能叫别的名字,比如 `fUid`、`FUID` 或者其他命名方式。 2. **字段被移除或重构**:可能你在运行时使用的类版本与你编写代码时不同,导致字段缺失。 3. **使用了错误的类对象**:你可能获取了错误的类对象,进而在这个类中查找 `fuid` 字段失败。 4. **字段是动态生成的,但在某些构建版本中未包含**。 --- ### 示例代码重现和解决办法: #### 1. 假设你有如下类定义: ```java public class User { private String uid; private String name; // 构造函数、getter 和 setter 略 } ``` #### 2. 使用反射访问不存在的字段会抛出 NoSuchFieldException ```java import java.lang.reflect.Field; public class ReflectionTest { public static void main(String[] args) { try { Class<?> userClass = User.class; Field field = userClass.getDeclaredField("fuid"); // 抛出异常 field.setAccessible(true); } catch (NoSuchFieldException | SecurityException e) { e.printStackTrace(); } } } ``` #### 输出结果: ``` java.lang.NoSuchFieldException: fuid at java.base/java.lang.Class.getDeclaredField(Class.java:2611) at ReflectionTest.main(ReflectionTest.java:8) ``` --- ### 解决方案: #### ✅ 方法一:确认字段名称是否正确 请检查你要访问的字段名是否与类中的字段名完全一致。例如上面例子中字段是 `uid` 而不是 `fuid`。 ```java // 正确访问存在的字段 try { Field field = userClass.getDeclaredField("uid"); field.setAccessible(true); Object value = field.get(userInstance); } catch (Exception e) { e.printStackTrace(); } ``` --- #### ✅ 方法二:遍历类的所有字段以调试 你可以打印类的所有字段来确认是否存在你需要的字段: ```java for (Field field : userClass.getDeclaredFields()) { System.out.println(field.getName()); } ``` 输出可能是: ``` uid name ``` 这有助于确认字段是否存在以及其准确名称。 --- #### ✅ 方法三:使用 getDeclaredFields() 遍历查找字段 如果你不确定字段名,可以遍历所有字段进行模糊匹配: ```java public static Field findField(Class<?> clazz, String fieldName) { for (Field field : clazz.getDeclaredFields()) { if (field.getName().equalsIgnoreCase(fieldName)) { field.setAccessible(true); return field; } } return null; } ``` --- ### 总结 `NoSuchFieldException` 是由于你试图访问一个不存在的字段引起的。你需要确保: - 字段名拼写正确; - 类版本一致; - 反射操作的目标类是你预期的那个。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值