Java Mission Control在Mac OS X上启动时会在JDK 1.8.0_161上冻结

29
我正在尝试在Mac OS X High Sierra(10.13.2,带有2018年1月的补充更新)上启动JDK 1.8.0_161中提供的Java任务控制,但JMC应用程序已冻结,即我无法在JVM浏览器面板中浏览。由于我安装了其他旧版JDK,因此我已经检查了以下版本的JMC并成功运行:
  • 1.8.0_121
  • 1.8.0_144
  • 1.8.0_151

所以这个问题非常特定于JDK 1.8.0_161版本。

(要查看您的JDK,请运行命令/usr/libexec/java_home -V)

(要运行旧版JMC,即/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/jmc)

作为一个附加验证,我已经在Windows 10上成功运行了JDK 1.8.0_161的JMC。

那么你有同样的问题吗?

是否有一些设置可以调整使其工作? (例如,这可能与Mac OS X Gatekeeper有关!)

如何向Oracle正确报告此问题...我在他们的错误数据库中搜索没有找到,当我尝试提交错误时,我无法确定哪个是正确的子类别(参见https://bugreport.java.com/submit_intro.do),因为JMC不在TOOLS部分中列出...有什么建议吗?


1
适用于随JDK 10.0.1一起出现的JMC 6。 - bmk1977
4个回答

47

正如@jwatkins在评论中提到的那样,有一种解决方法。

  1. 这里下载swt cocoa jar文件。
  2. 前往JDK的jmc路径(您可以右键单击dock中的jmc图标->选项->在Finder中显示此文件夹,然后右键单击App->显示包内容以查找此路径)。

    • 例如:cd /Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home/lib/missioncontrol
  3. 使用sudo mv plugins/org.eclipse.swt.cocoa.macosx.x86_64_3.103.1.v20140903-1947.jar ../备份现有的jar文件。

  4. 使用sudo cp ~/Downloads/swt.jar plugins/org.eclipse.swt.cocoa.macosx.x86_64_3.103.1.v20140903-1947.jar复制下载的zip压缩包中的swt.jar文件。
  5. 重新启动jmc应用程序。

注意:请记得将新复制的jar文件命名为与旧文件完全相同的名称(它使用OSGi bundles.info来加载jar文件)。


插件似乎有版本号,当您复制替换的jar时会导致启动失败。 - Kirk
1
第一步中的链接确实能够返回,但我尝试的所有镜像都是404。因此使用了这个链接:https://search.maven.org/search?q=g:org.eclipse.platform%20AND%20a:org.eclipse.swt.cocoa.macosx.x86_64&core=gav 并下载了最新版本(我的情况是3.109)。完成了! - Roy Truelove
JMC目前可以工作,但在加载JFR文件时出现以下异常:java.lang.ClassCastException: org.eclipse.swt.layout.GridData无法转换为org.eclipse.swt.layout.FillData at org.eclipse.swt.layout.FillLayout.flushCache(FillLayout.java:176) at org.eclipse.swt.widgets.Composite.layout(Composite.java:870) at org.eclipse.swt.widgets.Control.requestLayout(Control.java:2847) at org.eclipse.swt.custom.CTabFolder.destroyItem(CTabFolder.java:816) at org.eclipse.swt.custom.CTabItem.dispose(CTabItem.java:130) - abbas
6
我使用 3.108.0 版本的 SWT 已经解决了异常问题,最新版本对我来说有些错误。 - abbas
1
对我来说有效的是jdk v1.8.0_211。使用了jar的3.108.0版本。感谢@RasikaPerera。 - menaka_
显示剩余3条评论

26

很不幸,我们最近发现了一个错误,由于旧版Eclipse/SWT版本与JDK 8u152(从JDK 9退回)中进行的新修复之间的不兼容性引起。

解决方法是运行旧版本的JDK 8或最新版本的JDK 7(其中包括相同版本的JMC)。 JDK 9也可以使用,其中包含新的JMC 6。

(Oracle内部)错误参考:JMC-5139


2
该错误仍然存在于Java版本“1.8.0_162”中。 - pinkdawn
1
@klara,即使在JDK 8u152中也无法正常工作。 - Hakuna Matata
这个错误在1.8.0_171版本仍然存在。 - Denis Bazhenov
在信息上加1, 在解决方法上减1。 - Roy Truelove
糟糕 - 你们做什么样的测试? - Amir Afghani
显示剩余3条评论

6

我曾经遇到同样的问题,如果您不介意使用eclipse,您可以安装这个插件:https://marketplace.eclipse.org/content/java-mission-control

但是,正如Klara's accepted answer所说,我最终成功运行了Java Mission Control(虽然不是最新版本,但仍然没有大的解决方法):

  1. 下载旧版JDK(我选择了Java SE Development Kit 8u91
  2. 我将其放在我的/Library/Java/JavaVirtualMachines存储库中。 我没有更改环境变量,因为我想继续使用更新的版本。
  3. 我启动了位于jdk1.8.0_91.jdk/Contents/Home/lib/missioncontrol/Java Mission Control.app中的应用程序

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接