あなたの助けが必要です: システム トレイに最小化する必要がある小さな Java アプリケーション (Java バージョン 7) に取り組んでいます。
SystemTray.isSupported() を使用して、クラス SystemTray を使用しています。
SystemTray systemTray = SystemTray.getSystemTray();
ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("icon.png"));
[...]
systemTray.add(trayIcon);
(もちろんポップアップ付き)
Windowsでは、うまく機能しています。XFCE、Xubuntu では問題ありません。アイコンはポップアップで動作します。ただし、KDE および Gnome シェルでは...動作しません。
KDE (4.14.1)
(Qt: 4.8.6 Tools Plasma: 4.11.12)
SystemTray.isSupported() = true で、プログラムが次の行に到達したとき: systemTray.add(trayIcon); 例外がキャッチされます:
トレイ プロセス中のエラー: java.awt.AWTException: TrayIcon を表示できませんでした。
そのため、アイコンは白く、ユーザーがクリックしても機能せず、ポップアップも表示されません。
Gnome シェル (3.12.2)
SystemTray.isSupported() = true、アイコンは下部の通知領域にありますが、マウス イベントは機能しません...
これらの問題を解決するには、SWT が良いアイデアだと思いました。しかし、私がそれを実装したとき(最後のバージョン)、次の警告が表示されました:
警告 **: アクセシビリティ バスに接続できませんでした: ソケット /tmp/[...] への接続に失敗しました
そして、それは機能しません...編集:もう、SWTの問題を外部クラスで修正できます。警告は SWT によるものではなく、おそらく環境システムによるものです (端末内の他のアプリケーションでも同じ警告が表示されました)。
では、どうすればよいのでしょうか。&で環境システムをチェックし、それが KDE または Gnome 3 の場合はシステム トレイを有効または無効にすることを考えています... しかし、このソリューションはマルチプラットフォーム用のローカルソリューションであるため、あまり良くありません (OS の機能では、つまり)、グローバルなソリューションではありません(すべてのOSに1つの方法)...System.getenv("XDG_CURRENT_DESKTOP")
System.getenv("GDMSESSION")
それで、別のアイデア?わかりません...組み込みの JWindow をシステム トレイに定義する方法はありますか?