代码编译期间遇到警告消息“使用或覆盖已弃用的API”

时间:2013-08-19 10:48:45

标签: java multithreading

我编译了我的程序,我收到以下错误。我该如何解决?

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

2 个答案:

答案 0 :(得分:17)

您应该做的是做警告信息所说的内容。使用-Xlint:deprecation选项重新编译该类。

编译器将告诉您正在使用或覆盖的已弃用的API。

(或者,如果你向我们展示了这个类的源代码,我们可能会为你发现问题......或者自己编译它。)


但是我要猜测你正在使用Thread类中不赞成使用的方法之一:

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

这些方法不可靠,不安全或两者兼而有之。强烈建议您不要使用它们。阅读此解释:"Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?“。


一旦确定了导致问​​题的API,就有两种方法可以“解决”错误。

  1. 您可以阅读已弃用的API的javadoc,以找出为什么不推荐使用。然后根据javadocs所说的内容和上下文,您可以找到一种方法来替换代码对已弃用元素的使用。

  2. 您可以使用@SuppressWarnings("deprecation")注释告诉编译器“保持安静”。这通常是一个坏主意:

    • 以后的版本中可能删除了已弃用的API
    • 已弃用的API 可能存在基本缺陷,使您的应用程序在某些情况下不可靠。

答案 1 :(得分:4)

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

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