在Mac OS X上最小化后,JFrame不会刷新

时间:2012-10-10 04:45:24

标签: java macos swing jframe

我制作了一个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鼠标单击功能中的代码恢复。

Windows上的每一件事情都很顺利,没有任何问题。

但是在Mac OS X上,当我恢复应用程序时,它会显示动画样式的所有组件,这在Mac上是默认的,但是一旦它在屏幕上完全恢复,窗口就会显示一个空白窗口,就好像框架有没有组件。

我调查了这个问题并在Mac OS X Lion中发现了一个重绘帧错误,但我不认为这是问题所在。

我该怎么做才能解决这个问题?

我的目标是使最小化的应用程序在任务栏中不可见,并且图标显示在系统托盘通知中,因此用户可以通过单击系统托盘图标来恢复应用程序。

必须在Windows和Mac上执行。

enter image description here

由于

1 个答案:

答案 0 :(得分:2)

What should I do to solve this?

使用

  1. JFrame#setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);代替MainScreen.getInstance().setExtendedState(JFrame.ICONIFIED);

  2. MainScreen.getInstance().setVisible(true);应该是and only one code line中的最后一行(public void mouseClicked(MouseEvent e)),每个代码行都没用,因为JFrame.HIDE_ON_CLOSE只隐藏JFrame

  3. Every thing goes fine on Windows with no problems anywhere.我怀疑......,但是为了更好的帮助,请尽快发布SSCCE