我制作了一个 java swing 应用程序,它需要在 Windows 和 Mac OS X 上运行。
当用户点击最小化按钮时,应用程序被最小化,并在系统托盘中创建一个图标,代码如下:
MainScreen.getInstance().setExtendedState(JFrame.ICONIFIED);
trayIcon = new TrayIcon(new ImageIcon(getClass().getResource(
"/dragonstore/resources/icon.png")).getImage());
trayIcon.setToolTip("DragonStore");
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
MainScreen.getInstance().setVisible(true);
MainScreen.getInstance().setExtendedState(NORMAL);
SystemTray.getSystemTray().remove(trayIcon);
trayIcon=null;
MainScreen.getInstance().toFront();
MainScreen.getInstance().getMainPanel().revalidate();
MainScreen.getInstance().getMainPanel().repaint();
MainScreen.getInstance().pack();
MainScreen.getInstance().validate();
MainScreen.getInstance().repaint();
System.out.println("Restore");
}
});
SystemTray.getSystemTray().add(trayIcon);
trayIcon.displayMessage("DragonStore",
"Click here to maximized window again",TrayIcon.MessageType.INFO);
setVisible(false);
所以上面的代码执行得很好,当用户点击系统托盘图标时,应用程序由trayIcon
Mouse Clicked 函数中的代码恢复。
在 Windows 上一切正常,在任何地方都没有问题。
但是在 Mac OS X 上,当我恢复应用程序时,它会以动画样式显示所有组件,这在 Mac 上是默认设置,但是一旦它在屏幕上完全恢复,窗口就会显示一个空白窗口,就好像框架没有组件一样。
我调查了这个问题,并在 Mac OS X Lion 中发现了帧重绘错误,但我不认为这是这里的问题。
我应该怎么做才能解决这个问题?
我的目标是使最小化的应用程序在任务栏中不可见,并且图标显示在系统托盘通知中,因此用户可以通过单击系统托盘图标来恢复应用程序。
它必须同时在 Windows 和 Mac 上执行。
谢谢