我的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。谢谢你的帮助!
答案 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。