为什么NetBeans在OS X上运行我的程序,而不是将其构建到JAR中?

Ben*_*ero 10 java macos netbeans cross-platform

TL;博士

我错过了什么依赖允许NetBeans在内部运行OS X集成程序,但是不能清理并构建它到JAR?


我正在尝试制作一个集成到OS X中的Java程序,但我希望将它发布到Windows和Linux上.为此,我正在使用com.apple.eawt包的实用程序类.

到目前为止,它一直很棒.我已将我的菜单栏集成到OS X中,我有首选项处理程序和关于处理程序以及所有有趣的东西,并且它工作得很好...当我只是单击RunNetBeans时.然而!当我点击时Clean and Build,我会收到许多这样的错误:

/my/source/path/MenuBarManager.java:3: error: package com.apple.eawt does not exist
import com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62: error: cannot find symbol
    private static class MyAboutHandler implements AboutHandler {
                                                   ^
  symbol:   class AboutHandler
  location: class MyMenuBarManager
/my/source/path/MyMenuBarManager.java:68: error: package AppEvent does not exist
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
                                          ^
/my/source/path/MyMenuBarManager.java:67: error: method does not override or implement a method from a supertype <br/>
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
        ^
Run Code Online (Sandbox Code Playgroud)

为什么我可以在IDE中运行它,但我不能告诉IDE将其编译为JAR?


尝试修复

我试图通过创建一个全新的NetBeans项目,将所有源文件复制到其中,然后单击"清理并构建"来完成重新创建项目的Ajith John的修复.我得到了相同的结果,所以这不起作用.

小智 3

即使包com.apple.eawt位于运行时 jar 中rt.jar(如果在 OS X 上),编译器也会在名为 的符号文件中查找包ct.sym。符号文件仅包含标准 Java 包,不包含 Apple 扩展。

一种解决方案是使用 javac 选项,-XDignore.symbol.file如下所示。但是 -XD 选项是非标准且无文档的,请参阅此处此处

在此输入图像描述

更好的解决方案可能是以不使用非标准 Apple 扩展的方式重写代码。