【问题标题】:JAVA SWT/AWT Eclipse Mac OSX Java Cocoa CompatibilityMode EnabledJAVA SWT/AWT Eclipse Mac OSX Java Cocoa CompatibilityMode 已启用
【发布时间】:2026-02-07 23:35:02
【问题描述】:

我正在开发一个相当复杂的Java 应用程序混合SwingSWT。每当我启动应用程序时,这是控制台输出(并且应用程序不显示):

2012-12-19 12:45:45.359 java[3442:f07] [Java CocoaComponent compatibility mode]: Enabled
2012-12-19 12:45:45.360 java[3442:f07] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000

我遵循了许多指南和教程设置:

  1. System.setProperty("com.apple.awt.CocoaComponent.CompatibilityMode", "false");
  2. -XstartOnSecondThread
  3. --launcher-on-secondThread

现在我真的没有任何线索。使我的应用程序在Mac OSX 上运行的唯一方法是export the Eclipse project to a JAR executable。好吧,这很烦人。有人可以向我解释如何设置上面的这些属性吗?有什么魔术吗?

编辑:我正在使用:

OSX Mountain Lion 10.8.2 ,
Java 1.6u37 64bit,
SWT 4.2 cocoa x64,
Windows XP ,
Java 1.6u37 32bit,
SWT 4.2 32bit 

【问题讨论】:

  • 什么版本的 Eclipse?
  • 现在我正在下载 Indigo ...希望这能解决问题
  • 不,它也不适用于 Indigo
  • 您是说从 Eclipse 运行时您设置这些属性?如果要设置它们,如何设置?
  • 您似乎需要在运行/调试配置中-vmargs 之后设置它,在eclipse.ini 中设置它应该无效。我想你只会想要-vmargs -Dcom.apple.awt.CocoaComponent.CompatibilityMode=false -XstartOnFirstThread。您不应该需要--launcher.secondThread,因为这只会影响 Swing 启动器。据我所知,没有 -XstartOnSecondThread 这样的东西。

标签: java cocoa swing swt awt


【解决方案1】:

我曾多次遇到此问题,因为我在一家 Java 商店工作,每个人都使用 Eclipse,而且我是 OS X 用户。

修复有点奇怪。

您需要从“已安装的 JRE”首选项中删除当前的 JRE,然后重新添加。执行此操作时,请确保选择“标准 JVM”并且不是“Mac OS X JVM”。

添加 JRE 有点烦人,所以在添加之前请记下“Location”路径字符串。您会将其指向同一个地方,只需更改“类型”属性即可。

所以,我的答案是错误的。如果你只做 Swing/AWT 是相关的,但是在发布这个之后我不得不立即写一个 SWT_AWT boondoggle 并且我在我的 Mac 上遇到了同样的错误,即使使用上述设置。我怀疑这与 Swing/AWT 和 SWT 在事件循环方面的差异有关(SWT = 自带,Swing = 由 JVM 提供)。我在 IntelliJ IDEA 12 中也遇到了错误,所以这不仅仅是 Eclipse 问题。

【讨论】:

  • 我最终使用了 Netbeans,它第一次正确启动而没有添加任何东西。当从 PC 切换到 Mac 再到 GNU/Linux 时,所谓的“多平台”语言有这么多问题,真是太可惜了。 :-(
  • @neo 同意,但是 SWT != Java。 Java 本身在跨平台方面做得很好,但 SWT 高度依赖于本机代码及其桥接的质量。它也不是任何官方 Java 工作规范的一部分,它归 Eclipse 基金会所有,最初是 IBM 产品。任何依赖本机库的东西都很难跨平台部署。
  • 没错,我正在考虑移植到 JavaFX。这样做我可以删除所有的 Swing 和 SWT 片段。 JavaFX 有自己的网络浏览器实现。
【解决方案2】:

我在我的 Macbook 中遇到了同样的问题,我可以看到您正在下载 Eclipse Indigo,这是您能做的最好的。 Juno 有错误,而且速度很慢,因为它比以前的版本消耗更多的性能。我认为 Indigo 是最好的选择。我知道 Java 是可移植的和多平台的,但是在使用苹果设备之后,我发现与 Java 存在某种不兼容,我认为不是因为 Java,而是因为 iOS,这就是为什么对我来说我能做的最好的就是安装带有 Ubuntu 的虚拟机。因此,您可以尝试使用您喜欢的 Linux 发行版。

【讨论】:

    【解决方案3】:

    当我使用 jar 生成图表时,我遇到了一个类似的问题。 je jar 使用了似乎与 OSX 不兼容的 swt。如果您正在使用 swt 或使用 swt 导入了 jar,请尝试删除它并找到使用 awt 的等效项

    【讨论】: