【问题标题】:Should I be concerned using AWTUtilities.setWindowShape()?我应该担心使用 AWTUtilities.setWindowShape() 吗?
【发布时间】:2015-06-16 03:12:08
【问题描述】:

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

javadoc 生成给了我这个错误:

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

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

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

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

仅供参考,我已阅读此内容:

How to distribute AWTUtilities

【问题讨论】:

    标签: java awt awtutilities jdk-internal-api


    【解决方案1】:

    Oracle documentation 声明:

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

    【讨论】:

    • 我们不能使用 SWT_AWT,因为我们正在创建自定义 shell。所以我们必须应对风险。很高兴知道在 Java 7 之前我不必担心此类会被删除。
    【解决方案2】:

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

    this.setShape(shape);
    

    或像这样的框架名称

    Frame1.setShape(shape);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2013-03-20
      • 2019-07-13
      • 1970-01-01
      相关资源
      最近更新 更多