我应该关注使用AWTUtilities.setWindowShape()吗?

时间:2010-08-03 19:17:46

标签: java awt awtutilities jdk-internal-api

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

javadoc生成给了我这个错误:

  

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

这究竟是什么意思?我可以使用它,但它可能会停止使用任何版本?为什么要把它放进去呢?更重要的是,这里真正的问题是,如果Sun将其取出,他们是否可能用其他方式替换它来做同样的事情?这是警告的意思吗?

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

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

仅供参考,我读过这个:

How to distribute AWTUtilities

2 个答案:

答案 0 :(得分:4)

Oracle documentation声明:

  

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

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

执行此操作的一种稳定方法是按照此snippet在SWT中创建Shell,然后使用SWT_AWT桥接器在您的应用程序中使用Frame:

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

如果您只是部署到单个平台(如Windows),那么抛出一个SWT jar和本机库。如果你的目标是多个平台,那么这就变得很痛苦。

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

修改

一段时间过去了,Java 7已经出局了。在Java Tutorials中有关于官方支持的完成此任务的方法的文档。底部的“如何实现形状窗口”部分给出了一个示例。这当然假设您可以强制要求Java 7

答案 1 :(得分:0)

您不需要新的Frame对象,只能使用

this.setShape(shape);

或您的框架名称

Frame1.setShape(shape);

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