4

AWTUtilities在我的应用程序中使用该类来创建自定义窗口形状。据我所知,没有其他方法可以做到这一点。这是一个要求。

javadoc 生成给了我这个错误:

警告:com.sun.awt.AWTUtilities 是 Sun 专有 API,可能会在未来的版本中删除

这到底是什么意思?我可以使用它,但它可能会停止与任何版本一起工作?那为什么要放进去?更重要的是,这里真正的问题是,如果 Sun 把它拿出来,他们是否会用另一种方式来代替它来做同样的事情?这就是警告的目的吗?

我想我可以在调用代码之前检查 AWTUtilities 类的存在。但是,如果我不需要这样做,那就太令人讨厌了。

有没有人有类似课程的经验?他们最终是否被 API 接受并且警告被删除或替换为做同样事情的另一种方法?我需要担心这个吗?

仅供参考,我读过这个:

如何分发 AWTUtilities

4

2 回答 2

4

Oracle文档指出:

注意:com.sun.awt.AWTUtilities 类不是官方支持的 API 的一部分,它显示为实现细节。API 仅用于核心平台之外的有限使用。它可能会在更新版本之间发生巨大变化,甚至可能在其他一些包或类中被删除或移动。该类应通过 Java 反射使用。受支持的公共 API 将出现在下一个主要 JDK 版本中。

JDK 7 已经发布了很长时间,所以可能需要一段时间。您是否应该使用它是一个只有您的公司才能回答的风险管理问题。如果我们谈论的是可以保证已部署 JRE 的内部应用程序,那么您不会遇到问题,因为您可以保证兼容的 JRE。如果我们谈论的是部署给外部客户,那么如果这个临时 API 发生变化,您需要制定一个支持计划。

一个稳定的方法是根据这个片段在 SWT 中创建一个 Shell ,然后使用 SWT_AWT 桥来获取一个框架以在您的应用程序中使用:

java.awt.Frame frame = SWT_AWT.new_Frame(shell);

如果您只是部署到单个平台(如 Windows),则需要使用单个 SWT jar 和本机库。如果您针对多个平台,那么这将变得很痛苦。

所以这是两个选择:处理 AWTUtilities 风险或使用 SWT_AWT 网桥。

编辑:

一段时间过去了,Java 7 出来了。在Java 教程中有关于官方支持的方式来完成此操作的文档。底部的“如何实现异形窗口”部分给出了一个示例。这当然假设您可以强制使用 Java 7

于 2010-08-03T22:43:51.257 回答
0

你不需要一个新的 Frame 对象,你只能使用

this.setShape(shape);

或者你的框架名称是这样的

Frame1.setShape(shape);

很多 AWT 方法已应用于 java.awt.Frame

于 2013-02-26T03:28:11.197 回答