1

私は 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);

したがって、上記のコードは正常に実行され、ユーザーがシステム トレイ アイコンをクリックすると、trayIconMouse Clicked 関数のコードによってアプリケーションが復元されます。

Windows ではすべて問題なく動作し、どこにも問題はありません。

しかし、Mac OS X でアプリケーションを復元すると、すべてのコンポーネントが Mac のデフォルトであるアニメーション スタイルで表示されますが、画面に完全に復元されると、フレームにコンポーネントがないかのようにウィンドウに空白のウィンドウが表示されます。

この問題を調べたところ、Mac OS X Lion でフレームの再描画のバグが見つかりましたが、ここでの問題ではないと思います。

これを解決するにはどうすればよいですか?

私の目的は、最小化されたアプリケーションをタスク バーから非表示にし、アイコンをシステム トレイ通知に表示して、ユーザーがシステム トレイ アイコンをクリックしてアプリケーションを復元できるようにすることです。

Windows と Mac の両方で実行する必要があります。

ここに画像の説明を入力

ありがとう

4

1 に答える 1

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_CLOSEJFrame

  3. Every thing goes fine on Windows with no problems anywhere.私は疑っています...しかし、より良い助けのために、SSCCEをより早く投稿してください

于 2012-10-10T06:08:46.723 に答える