Access restriction: The type BASE64Decoder is not accessible due to restriction on required

本文介绍了解决在Eclipse中使用sun.misc.BASE64Decoder时遇到的访问限制问题的方法。通过移除并重新添加JRE System Library到项目构建路径中,可以有效解决该问题。

转载地址点击打开链接

sun.misc.BASE64Encoder找不到jar包的解决方法

在MyEclipse中编写Java代码时,用到了BASE64Decoder,importsun.misc.BASE64Decoder;可是Eclipse提示:
Access restriction: The type BASE64Decoder is not accessible due torestriction on required library C:\Program
files\java\jre6\lib\rt.jar
Access restriction : The constructor BASE64Decoder() is notaccessible due to restriction on required library C:\Programfiles\java\jre6\lib\rt.jar

解决办法:

在项目的Buildpath中先移除JRE System Library,再添加库JRE SystemLibrary,重新编译后就一切正常了

在Eclipse中编写Java代码时,用到了BASE64Decoder,import sun.misc.BASE64Decoder;可是Eclipse提示: 
Access restriction : The type BASE64Decoder is not accessible due to restriction on required library C:\Program 
files\java\jre6\lib\rt.jar 
Access restriction : The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program files\java\jre6\lib\rt.jar 
搞不懂是为什么,最后在http://forums.dzone.com/eclipse/384-access-restriction- problems.html找到答案,只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。但是我仍然很疑惑是为什么。。。
------------------------------ 

还有人说是按照下面的解决办法,但是个人觉得这样不是很靠谱……
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

Exception in thread "main" java.lang.Error: Unresolved compilation problems: Access restriction: The type String is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type UIManager is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type UIManager is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar The method getSystemLookAndFeel() is undefined for the type UIManager Access restriction: The type Exception is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method printStackTrace() from the type Throwable is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type JFrame is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The constructor JFrame(String) is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type JFrame is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method setDefaultCloseOperation(int) from the type JFrame is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type JFrame is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The field EXIT_ON_CLOSE from the type JFrame is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method setSize(int, int) from the type Window is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method setLocationRelativeTo(Component) from the type Window is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method add(Component) from the type Container is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The constructor JLabel(String, int) is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type JLabel is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The type SwingConstants is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The field CENTER from the type SwingConstants is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar Access restriction: The method setVisible(boolean) from the type Window is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.8.0\jre\lib\rt.jar at MainApp.main(MainApp.java:5)测试的代码报错
最新发布
12-16
你现在的错误非常关键: > **所有 Java 基础类都被限制访问!** > `String`、`Exception`、`JFrame`、`JLabel`、`UIManager` 等等全部报: > > ``` > Access restriction: The type XXX is not accessible due to restriction on required library rt.jar > ``` 这说明:你的项目 **无法访问 JDK 的核心类(rt.jar)**,哪怕是最基本的 `String` 都不能用! --- ## 🔥 根本原因 Eclipse 认为你引用的是一个“不完整”或“受限”的 JRE/JDK,导致它把 `rt.jar` 中的所有类都标记为 **不可访问**。 虽然你装了 JDK 1.8,但 Eclipse 可能以错误的方式加载了它 —— 比如把它当成了“外部”而不是系统 JRE。 --- ## ✅ 终极解决方案(必须一步步操作) ### ✅ 第一步:彻底移除当前的 JRE 引用 1. 右键你的项目 → **Properties** 2. 左侧选择 **Java Build Path** 3. 中间标签页选 **Libraries** 4. 找到 `JRE System Library [JavaSE-1.8]` 或类似项 5. **选中它 → 点击右边的 Remove** 📌 此时你会发现 `src` 下的所有导入都变红了,没关系。 --- ### ✅ 第二步:重新添加标准 JRE(关键!) 1. 还在 **Java Build Path** 页面 2. 点击 **Add Library...** 3. 选择 **JRE System Library** → Next 4. 选择: ``` ☑ Standard Widget Toolkit (Standard) - Workspace default JRE (jdk1.8.0_xxx) ``` 5. 点击 **Finish** ✅ 这样才能确保你使用的是“标准可访问”的 JDK 环境 --- ### ✅ 第三步:检查是否还有 Access Rules 限制 展开刚刚添加的 `JRE System Library` → 找到 **Access rules** → 如果看到任何规则(尤其是 `access restrictive`),请做以下操作: #### 删除或修改 Access Rules: 1. 选中 **Access rules** → 点击 **Edit...** 2. 如果列表中有内容: - 选中每一行 → 点击 **Remove** 3. 然后点击 **Add...** - Rule kind: `resolution` - Matching rule: `**` 4. 点击 OK → Apply and Close > ⚠️ 必须有这一条,否则仍然会被拦截 --- ### ✅ 第四步:验证是否修复成功(最小测试代码) 将以下代码复制到 `MainApp.java`: ```java import javax.swing.*; import java.awt.*; public class MainApp { public static void main(String[] args) { JFrame frame = new JFrame("Hello"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 100); frame.setLocationRelativeTo(null); frame.add(new JLabel("Success!", SwingConstants.CENTER)); frame.setVisible(true); } } ``` 📌 注意:这次我们连 `UIManager` 都不用,只测试最基础的 Swing 能否运行。 --- ### ✅ 第五步:清理并运行 1. 菜单栏:**Project → Clean** → Clean your project 2. 保存文件(Ctrl + S) 3. 右键 `MainApp.java` → **Run As → Java Application** --- ## ✅ 成功标志 如果弹出一个窗口,中间写着 `"Success!"`,就说明: 🎉 所有类都能正常访问了! ✅ `JFrame`、`JLabel`、`String`、`Exception` 全部恢复正常 ➡️ 你现在可以开始开发学生信息管理系统了! --- ## ❌ 常见陷阱(避免再错) | 错误做法 | 正确做法 | |--------|---------| | 直接把 `rt.jar` 当外部 JAR 添加 | 使用 **Add Library → JRE System Library** | | 不检查 Access rules | 必须添加 `resolution **` 规则 | | 从别的项目复制 `.classpath` 文件 | 手动重建 Build Path 更安全 | --- ## 💡 补充建议 如果你以上步骤都做了还是不行,请尝试: ### 创建一个全新的 Java 项目: 1. **File → New → Java Project** 2. 输入项目名:`TestSwing` 3. 点击 **Next** → 切换到 **Libraries** 标签页 4. 点击 **Add Library** → 选择 **JRE System Library** → 完整添加 5. Finish 6. 新建类 `MainApp`,粘贴上面的成功代码 👉 很多时候旧项目的配置已经“中毒”,新建项目反而最快解决! --- ## ✅ 总结:你现在要做的三件事 | 步骤 | 操作 | |------|------| | 1 | 移除现有 JRE,用 **Add Library → JRE System Library** 重新添加 | | 2 | 设置 Access Rules:添加 `resolution` + `**` | | 3 | 新建一个干净项目或清理旧项目,运行最小测试代码 | 只要这三步完成,你的程序一定能跑起来! 如果还有问题,请告诉我: - Eclipse 版本(帮助 → About Eclipse) - JDK 是否是 32位?从哪下载的? - 截图显示 Build Path 和 Access Rules 设置 我可以继续帮你远程诊断。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值