【发布时间】:2013-08-19 10:48:44
【问题描述】:
我编译了我的程序,但出现以下错误。我该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
【问题讨论】:
标签: java multithreading
我编译了我的程序,但出现以下错误。我该如何解决?
Note: ClientThreadClients.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
【问题讨论】:
标签: java multithreading
您应该按照警告消息所说的去做。使用-Xlint:deprecation 选项重新编译该类。然后编译器会告诉您正在使用或覆盖的已弃用 API。
怎么做?
如果您使用 javac 从命令 shell 编译,只需将 -Xlint:deprecation 选项添加到命令行。
对于 Maven 构建,按如下方式运行 maven:
mvn clean install -Dmaven.compiler.showDeprecation=true
对于 Gradle 构建,将以下内容添加到根构建文件:
allprojects {
tasks.withType(JavaCompile) {
options.deprecation = true
}
}
或在特定的编译任务上设置选项。
对于 Ant 构建,在 javac 任务中将 deprecation 属性设置为 true。
对于 IDE:
确定导致问题的 API 后,可以通过三种方法“解决”错误。
您可以阅读已弃用 API 的 javadocs 以了解 为什么它已被弃用。然后根据 javadocs 所说的内容和上下文,您需要找到一种方法来用更好的方式替换代码对已弃用元素的使用。
您可以使用@SuppressWarnings("deprecation") 注释告诉编译器“保持安静”。
这通常是个坏主意:
已弃用的 API可能会在将来的版本中删除,这将阻止您的代码在升级时运行。 (建议您查看有关删除已弃用 API 的产品政策。)
已弃用的 API可能存在基本缺陷,导致您的应用程序在某些情况下不可靠。
不明智地压制这些警告只是在创建您或您的继任者将来必须解决的技术部门。
如果弃用警告是由于 Java SE 本身或您正在使用的第 3 方 API 发生变化,您可以通过回滚到未显示警告的版本来“解决”它。 这甚至比上一个更糟糕。通过回滚,您只是让技术部门积累起来。
(对于这个特定示例,我的猜测是 OP 使用了 Thread 类中已弃用的方法之一:
countStackFrames()destroy()pause()resume()stop()stop(Throwable)suspend()这些方法要么不可靠,要么不安全,要么两者兼而有之,强烈建议您不要使用它们。阅读此说明:"Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?"。)
【讨论】:
第 1 步:找出代码使用的已弃用 API。如果您使用现代 IDE(eclipse 或类似工具),不推荐使用的代码将被清楚地标记,通常使用删除线字体。如果从命令提示符编译,则在编译时将-Xlint:deprecation 添加到命令行。
第 2 步。阅读已弃用 API 的文档以了解如何替换它。
【讨论】: