24

我编译了我的程序,但出现以下错误。我应该如何解决?

Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
4

2 回答 2

25

你应该做的是按照警告消息所说的去做。-Xlint:deprecation使用该选项重新编译该类。然后编译器会告诉您正在使用或覆盖哪些已弃用的 API。

怎么做?


确定导致问题的 API 后,有两种方法可以“解决”错误。

  1. 您可以阅读已弃用 API 的 javadocs 以了解其被弃用的原因。然后根据 javadocs 所说的内容和上下文,您需要找到一种方法来用更好的东西替换代码对已弃用元素的使用。

  2. 您可以使用@SuppressWarnings("deprecation")注释告诉编译器“保持安静”。

    这通常是一个坏主意:

    • 不推荐使用的 API可能会在未来的版本中删除,这将阻止您的代码在升级时运行。(建议您查看有关删除已弃用 API 的产品政策。)

    • 不推荐使用的 API可能存在使您的应用程序在某些情况下不可靠的基本缺陷。


(对于这个特定的示例,我的猜测是 OP 正在使用Thread该类中已弃用的方法之一:

  • countStackFrames()
  • destroy()
  • pause()
  • resume()
  • stop()
  • stop(Throwable)
  • suspend()

这些方法要么不可靠,要么不安全,要么两者兼而有之,强烈建议您不要使用它们。阅读此解释:“为什么不推荐使用 Thread.stop、Thread.suspend 和 Thread.resume? ”。)


有人在评论中指出,他们收到了弃用警告,因为他们在类路径上有两个不同版本的库。他们通过摆脱其中一个来“修复它”。事实上,在这种情况下,真正的原因可能是较新版本的库已经弃用了一些 API 类或方法,它们的应用程序是针对这些类或方法进行编译的。他们的“修复”实际上是回滚到旧版本的 API。

可以说,这是一件坏事。他们的应用程序现在因 API 的旧版本而停滞不前,至少在他们找出问题的真正原因之前是这样。问题是他们正在积累技术债务,最终需要以一种或另一种方式解决。

于 2013-08-19T10:53:18.267 回答
4

第 1 步:找出代码使用的已弃用 API。如果您使用现代 IDE(eclipse 或类似工具),不推荐使用的代码将被清楚地标记,通常使用删除线字体。如果从命令提示符编译,则在编译-Xlint:deprecation时添加到命令行。

步骤 2. 阅读已弃用 API 的文档以了解如何替换它。

于 2013-08-19T10:53:31.060 回答