小编典典

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

java

我缺少什么依赖关系,该依赖关系允许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) {
        ^

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

尝试修复我尝试通过创建一个全新的NetBeans项目,将所有源文件复制到其中并单击
“清理并生成”来完全重新创建该项目的Ajith John修复方法。我得到了相同的结果,所以这没有用。


阅读 188

收藏
2020-11-23

共1个答案

小编典典

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

一种解决方案是使用javac选项-XDignore.symbol.file,如下所示。但是,-XD选项是非标准的且未记录,

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

2020-11-23