为什么NetBeans在执行Clean和Build时找不到包com.apple.eawt?

时间:2016-07-03 20:49:40

标签: java macos netbeans

我的NetBeans IDE响应"包com.apple.eawt不存在"当我选择清理和构建项目但选择运行项目时工作正常。

我有一个针对OS X的Java 8应用程序。当用户从菜单中选择退出时触发Window Listener我有以下代码:

import com.apple.eawt.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class AppleUI extends JFrame {

public AppleUI() {
    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(400, 200));
    this.add(panel);

    Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.out.println("Quitting");
            System.exit(0);
        }
    });

    this.setVisible(true);
    this.pack();
}

public static void main(String[] args) {
    new AppleUI();
}
}

当我在NetBeans中选择Run Project时,应用程序正常工作。但是,当我选择Clean and Build Project或Test Project时,我收到以下错误:“package com.apple.eawt不存在”。

因此,我也为Application和QuitStrategy找到了“找不到符号”的错误。

我发现这很奇怪。 com.apple.eawt包与所有其他Java运行时类一起位于rt.jar中。为什么NetBeans在执行Clean和Build时没有识别出这一点?我做错了什么?

我正在使用JDK 1.8.0_91和NetBeans IDE 8.1。谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

回答我自己的问题......

经过大量研究后,我发现编译器不是在rt.jar中查找包,而是在名为ct.sym的符号文件中查找,该文件只包含标准Java包。

可以使用编译器选项-XDignore.symbol.file忽略符号文件,但这似乎不是推荐的解决方案。

相反,我已经以不使用com.apple.eawt包但系统属性的方式重写了代码。

//Application.getApplication().setQuitStrategy(QuitStrategy.CLOSE_ALL_WINDOWS);
System.setProperty("apple.eawt.quitStrategy", "CLOSE_ALL_WINDOWS");

另见here