解决想用sun.*(sun.awt.*)等jdk自带但是不能导入的问题

问题介绍

今天在学习粘贴板的时候,查看实现的时候发现了Toolkit这个工具类,里面有着很多的工具。但是由于是个抽象类不能直接创建对象,得使用Toolkit.getDefaultToolkit()。
然后我发现有2个实现类在这里插入图片描述
然后就查看了源码,来自sun.awt.windows包下的,发现没有注释。
在这里插入图片描述
在调用的时候没有这个类
在这里插入图片描述
导入这个包,无法解析
在这里插入图片描述

解决方案

idea

1.降低jdk的版本,换成jdk8.
因为好像是:在jdk9以后java ee相关模块就不在java包里面了,增加额外依赖或者替换成其他的类

2.手动将路径添加到编辑器。
打开设置->构建、执行、部署->编译器->java编辑器
最下面有一个按模块重写编辑器参数:
–add-exports java.desktop/sun.awt.windows=ALL-UNNAMED
然后编辑器就不会报错了

--add-exports选项:模块声明中的exports语句将模块中的包导出到所有或其他模块,因此这些模块可以使用该包中的公共API。
 如果程序包未由模块导出,则可以使用-add-exports的命令行选项导出程序包
--add-opens选项: 模块声明中的opens语句使模块里面的包对其他模块开放,因此这些模块可以在运行期使用深层反射访问该程序包中的所有成员类型。 
如果一个模块的包未打开,可以使用--add-opens命令行选项打开它。 

后面=
ALL-UNNAMED,那么所有Classpath下的module,都可以访问source-module中的pakage包下的所有成员类型

在这里插入图片描述

3.idea在导入这个后,会自动提示,不过这个提示比较慢,可以不用你手动去添加,按照他的提示一键添加了。不过就是有时候会像上面一样出现无法解析,而不是下面这样。在这里插入图片描述

其他

由于我是用的idea,其他编辑器是不知道的。不过有一个通用的方法。
对于编译阶段,也就是javac命令,我们只需要添加–add-exports,对于上面的例子,就是:

javac --add-exports java.desktop/sun.awt.windows=ALL-UNNAMED

对于运行阶段,也就是java命令,我们最好把–add-exports和–add-open都加上,对于上面的例子,就是:

java --add-exports java.desktop/sun.awt.windows=ALL-UNNAMED --add-open java.desktop/sun.awt.windows=ALL-UNNAMED
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值