我编译了我的程序,但出现以下错误。我应该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
我编译了我的程序,但出现以下错误。我应该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
你应该做的是按照警告消息所说的去做。-Xlint:deprecation
使用该选项重新编译该类。然后编译器会告诉您正在使用或覆盖哪些已弃用的 API。
怎么做?
如果您从命令行编译,javac
只需将-Xlint:deprecation
选项添加到命令行。
对于 Maven 构建,按如下方式运行 maven:
mvn clean install -Dmaven.compiler.showDeprecation=true
对于 Gradle 构建,将以下内容添加到根构建文件中:
allprojects {
tasks.withType(JavaCompile) {
options.deprecation = true
}
}
或设置特定编译任务的选项。
对于 Ant 构建,将deprecation
属性设置为true
在javac
任务中。
对于 IDE:
确定导致问题的 API 后,有两种方法可以“解决”错误。
您可以阅读已弃用 API 的 javadocs 以了解其被弃用的原因。然后根据 javadocs 所说的内容和上下文,您需要找到一种方法来用更好的东西替换代码对已弃用元素的使用。
您可以使用@SuppressWarnings("deprecation")
注释告诉编译器“保持安静”。
这通常是一个坏主意:
不推荐使用的 API可能会在未来的版本中删除,这将阻止您的代码在升级时运行。(建议您查看有关删除已弃用 API 的产品政策。)
不推荐使用的 API可能存在使您的应用程序在某些情况下不可靠的基本缺陷。
(对于这个特定的示例,我的猜测是 OP 正在使用Thread
该类中已弃用的方法之一:
countStackFrames()
destroy()
pause()
resume()
stop()
stop(Throwable)
suspend()
这些方法要么不可靠,要么不安全,要么两者兼而有之,强烈建议您不要使用它们。阅读此解释:“为什么不推荐使用 Thread.stop、Thread.suspend 和 Thread.resume? ”。)
有人在评论中指出,他们收到了弃用警告,因为他们在类路径上有两个不同版本的库。他们通过摆脱其中一个来“修复它”。事实上,在这种情况下,真正的原因可能是较新版本的库已经弃用了一些 API 类或方法,它们的应用程序是针对这些类或方法进行编译的。他们的“修复”实际上是回滚到旧版本的 API。
可以说,这是一件坏事。他们的应用程序现在因 API 的旧版本而停滞不前,至少在他们找出问题的真正原因之前是这样。问题是他们正在积累技术债务,最终需要以一种或另一种方式解决。
第 1 步:找出代码使用的已弃用 API。如果您使用现代 IDE(eclipse 或类似工具),不推荐使用的代码将被清楚地标记,通常使用删除线字体。如果从命令提示符编译,则在编译-Xlint:deprecation
时添加到命令行。
步骤 2. 阅读已弃用 API 的文档以了解如何替换它。