您实际上缺少的是显示PopupMenu的父组件。实现此目的的一种方法是使用“不可见”框架(实际上是可见的,但具有0边界且未修饰,因此您看不到它),如下所示:
import java.awt.AWTException;import java.awt.CheckboxMenuItem;import java.awt.frame;import java.awt.Menu;import java.awt.MenuItem;import java.awt.PopupMenu;import java.awt.SystemTray;import java.awt.Toolkit;import java.awt.TrayIcon;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.net.MalformedURLException;import java.net.URL;public class MyTaskTray { public static void main(String arg[]) throws MalformedURLException { final frame frame = new frame(""); frame.setUndecorated(true); // Check the SystemTray is supported if (!SystemTray.isSupported()) { System.out.println("SystemTray is not supported"); return; } final TrayIcon trayIcon = new TrayIcon(Toolkit.getDefaultToolkit().getImage( new URL("http://home.comcast.net/~supportcd/Icons/Java_Required.jpg")), "Library Drop"); final SystemTray tray = SystemTray.getSystemTray(); // Create a pop-up menu components final PopupMenu popup = createPopupMenu(); trayIcon.setPopupMenu(popup); trayIcon.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { frame.add(popup); popup.show(frame, e.getXonScreen(), e.getYonScreen()); } } }); try { frame.setResizable(false); frame.setVisible(true); tray.add(trayIcon); } catch (AWTException e) { System.out.println("TrayIcon could not be added."); } } protected static PopupMenu createPopupMenu() { final PopupMenu popup = new PopupMenu(); MenuItem aboutItem = new MenuItem("about"); CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size"); CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip"); Menu displayMenu = new Menu("Display"); MenuItem errorItem = new MenuItem("Error"); MenuItem warningItem = new MenuItem("Warning"); MenuItem infoItem = new MenuItem("Info"); MenuItem noneItem = new MenuItem("None"); MenuItem exitItem = new MenuItem("Exit"); // Add components to pop-up menu popup.add(aboutItem); popup.addSeparator(); popup.add(cb1); popup.add(cb2); popup.addSeparator(); popup.add(displayMenu); displayMenu.add(errorItem); displayMenu.add(warningItem); displayMenu.add(infoItem); displayMenu.add(noneItem); popup.add(exitItem); return popup; }}从Java 1.7开始,您可以添加以下行以从任务栏中删除应用程序栏:
frame.setType(Type.UTILITY);



