不破坏平台独立性的Java Mac OS X集成

不破坏平台独立性的Java Mac OS X集成,java,macos,cross-platform,Java,Macos,Cross Platform,我希望我的应用程序更好地集成Mac OS X。我读过书,学到了必须导入com.apple.eawt.*并编写一些额外的代码。但是,如果我这样做,我的应用程序将无法在Windows上工作,因为缺少引用。如果我用C写的话,我可以用预处理器命令来完成,但这是Java。如何在不将代码文件分为两个分支的情况下执行此操作?您可以让代码查看与操作系统相关的操作系统,并且只在看到Mac OS X时运行代码。我之前已将这些页面标记为书签,这些页面对如何调整针对OS X的Swing应用程序提出了很好的建议 使您的

我希望我的应用程序更好地集成Mac OS X。我读过书,学到了必须导入
com.apple.eawt.*
并编写一些额外的代码。但是,如果我这样做,我的应用程序将无法在Windows上工作,因为缺少引用。如果我用C写的话,我可以用预处理器命令来完成,但这是Java。如何在不将代码文件分为两个分支的情况下执行此操作?

您可以让代码查看与操作系统相关的操作系统,并且只在看到Mac OS X时运行代码。

我之前已将这些页面标记为书签,这些页面对如何调整针对OS X的Swing应用程序提出了很好的建议

  • 使您的Swing应用程序成为本地应用程序(,)
  • 将Java应用程序带到Mac OS X(,)

您可以在“main”函数的开头添加一些东西,使您的“swing”应用程序在MacOSX上看起来更原生(也适用于10.6)

这将使您的菜单栏进入mac菜单栏。它将在菜单栏中设置你的应用程序名称,并将你的应用程序外观设置为mac OSX l&f


它并不完美,但它是一个快速的开始:)

我使用反射来查看com.apple.which类是否存在,如果存在,我调用了它


工作得很好,不会造成中断导入。

我发现这很有帮助,希望通过更新来报答。“Mac OS X Integration for Java”网页上有一个名为“J2SE 5.0 Apple Extensions Reference”的链接,指向com.Apple.eawt文档,该文档(截至2015年12月)已不再有效,并显示“抱歉,找不到该页面”。我尝试在苹果开发者网站上搜索,但没有成功。好消息是我找到了这个链接,它的源代码是com.apple.eawt-


使用com.apple.eawt,我发现removeAboutMenuItem()方法已被弃用,并表示“使用setAboutHandler(AboutHandler)和null参数”。但是setAboutHandler(null)不起作用,不推荐使用的方法也起作用。

我知道这一点,但如果我添加“import com.apple.eawt.*”,我的代码将无法在Windows上编译。实际上,我的问题不完全是集成,我还希望我的代码在Windows上编译。如果您有包含com.apple.*类的JAR文件,您可以在任何平台上编译。我不知道它是哪个罐子,但你可能会在你的Mac电脑上的某个地方找到它。如果按照Michael的建议,避免在非Apple平台上使用这些类,那么在运行时就不需要JAR了。无论如何,我链接的文章表明,您可以在不需要任何Apple类的情况下实现很多功能。但是,如果我添加“import com.Apple.eawt.*”,代码将无法在Windows上编译。我说的对吗?你必须运行带有反射的代码才能编译。谢谢。这就是我要找的。
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Your app name");
try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} 
catch (ClassNotFoundException ex) {}
catch (InstantiationException ex) {}
catch (IllegalAccessException ex) {}
catch (UnsupportedLookAndFeelException ex) {}