JavaLaunchHelper类在两个地方实现


291

今天,我在macOS Sierra上升级了Intellij Idea,现在,当我在控制台中运行应用程序时,出现此错误:

objc [3648]:在/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java(0x10d19c4c0)和/Library/Java/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/中都实现了JavaLaunchHelper类目录/主页/jre/lib/libinstrument.dylib(0x10ea194e0)。将使用两者之一。哪一个未定义。

Answers:


476

您可以在此处找到所有详细信息:

  • 运行控制台中的IDEA-170117 “ objc:类JavaLaunchHelper均在...中实现”警告

这是Mac上Java中旧错误,是由IDE在启动应用程序时使用的Java代理触发的。此消息是无害的,可以忽略。Oracle开发人员的评论:

消息是良性的,此问题没有负面影响,因为该类的两个副本都是相同的(从完全相同的来源编译)。这纯粹是一个表面问题。

问题已Java 9Java 8更新152中修复

如果它使您烦恼或以任何方式影响您的应用程序(不应如此),则IntelliJ IDEA的解决方法是idea_rt通过添加idea.no.launcher=trueidea.propertiesHelp| Edit Custom Properties...)中来禁用启动器代理。解决方法将在IDE的下一次重新启动时生效。

但是,我不建议禁用IntelliJ IDEA启动器代理。它用于诸如正常关机(退出按钮),线程转储,变通方法等问题,这些问题包括超过操作系统限制的命令行太长等问题。仅出于隐藏无害消息的目的而丢失这些功能可能不值得,但是由你决定。


6
idea_rt是做什么的?有什么理由不禁用它吗?
TTT

8
它提供了优美的退出,线程转储,处理了可能超过OS限制的长类路径,等等。我不会禁用它,尤其是仅出于隐藏无害消息的原因。
CrazyCoder

16
我安装了Java 8更新152,它可以按照答案解决问题。谢谢。
大卫·维克多

3
152什么时候会通过Oracle Java SE推送?
Yogesh

1
安装了IntelliJ CE 2018.2,运行Java 8更新191:消息仍然存在。
Massimiliano Kraus

180

由于“此消息是无害的”(请参阅@CrazyCoder的答案),因此一个简单安全的解决方法是,可以通过IntelliJ IDEA设置在控制台中折叠此嗡嗡声消息:

  1. 【首选项】-【编辑】-【常规】-【控制台】-【包含的折叠控制台行】
    当然,您可以使用【Find Action ...】(cmd+shift+A在Mac上)并键入Fold console lines that contain以便更有效地导航。
  2. Class JavaLaunchHelper is implemented in both

图片

在我的计算机上,结果是:(LGTM:b)

图片

您可以展开该消息以再次检查它:

图片

PS:

截至2017年10月,此问题现在在jdk1.9 / jdk1.8.152 / jdk1.7.161中已解决以
获取更多信息,请参阅@muttonUp的答案


13

我正在使用Intellij Idea 2017,但遇到了同样的问题。对我来说解决问题的是

  1. 在智能中关闭项目
  2. 文件->新建->现有资源中的项目
  3. 使用从外部模型导入(如果有)
  4. 再次打开项目。

5
经典close then open解决方案=))
Khoa

我尝试了这里提供的所有解决方案作为答案,但只有该解决方案对我有用。我建议.idea在重新导入之前删除文件夹。
利沙伯

我在IDEA 2017年3月1日在MacOS塞拉利昂运行Java 8更新151.但是升级到152并没有工作重新启动IDEA和我的项目设置为使用更新后的152固定它
akubot

1

当我安装Intellij IDEA 2017时,这发生在我身上,转到菜单首选项->构建,执行,部署->调试器并禁用以下选项:“ Force Classic VM for JDK 1.3.x及更低版本”。这对我有用。


2
您可能还需要禁用CrazyCoder提到的idea_rt启动器代理。将idea.no.launcher = true添加到idea.properties中(帮助|编辑自定义属性...)。确保在此之后重新启动IDE。
Danny Guo

是的,自定义属性的解决方法确实起作用,您的建议对我的系统没有任何作用。您是否尝试过答案,即切换设置-我看不到JDK 1.3.x之前的选项如何产生效果?我对Java的8
大卫·维克多

对我来说,我一开始尝试了自定义属性,但对我来说不起作用。然后我发现此禁用JDK1.3.x解决方案。重新启动IDE后,一切正常。
Danny Guo

1
@DannyGuo,因为此问题是由任何Java代理引起的,并且在调试模式下Java代理还是用于现代JVM,这仅为您解决了调试模式下的问题,但是当启动器代理处于运行模式时,将在运行模式下出现问题已启用。
CrazyCoder

0

我发现了另一个解决方法:libinstrument.dylib从项目路径中排除。为此,请转到“ 首选项” ->“ 构建,执行和部署” ->“ 编译器” ->“ 排除” ->“ +”,然后在此处通过错误消息中的路径添加文件。


0

这是我几年前遇到的一个问题,我以前在Eclipse中通过从项目中排除1.7来解决了该问题,但是对于最近安装的IntelliJ来说,这又成为一个问题。我通过以下方式修复它:

  1. 卸载JDK:

    cd /Library/Java/JavaVirtualMachines
    sudo rm -rf jdk1.8.0_45.jdk

    (我已经jdk1.8.0_45.jdk安装了;显然,您应该卸载该文件夹中列出的所有Java版本。有问题的文件位于该文件夹中,应该删除。)

  2. 下载并安装JDK 9

请注意,下次创建新项目或打开现有项目时,需要将项目SDK设置为指向新的JDK安装。如果您在JavaVirtualMachines文件夹中安装了JDK 1.7,那么您可能仍然会看到此错误或将其重新出现(这是我认为发生的事情)。


0

同样的错误,我升级Junit并解决了

org.junit.jupiter:junit-jupiter-api:5.0.0-M6

org.junit.jupiter:junit-jupiter-api:5.0.0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.