2011-11-30 201 views
1

我看到很多關於這個問題的問題,但都沒有解決方案。 我的問題是: 我寫了一個具有系統托盤圖標的小型java應用程序。 當Windows資源管理器崩潰時(可以用停止explorer.exe進程來模擬),恢復後,我的系統托盤圖標消失,但我的應用程序進程繼續運行。資源管理器崩潰後恢復Java系統托盤圖標

當explorer.exe重新加載時,有沒有辦法恢復我的圖標?

我的問題是,我沒有一個窗口,我去。我的系統托盤本身就是一些命令的啓動器。我需要聽聽Windows任務欄的娛樂,然後我可以重新添加它。

+0

參見http://stackoverflow.com/questions/7923645/how-to-re-add-icon-to-system-tray-after-explorer-exe-crash/7923753 – 9000

+0

我之前看過這個帖子。你知道該怎麼做嗎? – SharonBL

+0

唉,我沒有Windows機器來試試它。我在評論中鏈接了一篇文章,展示瞭如何使用[JNA](https://github.com/twall/jna)進行操作。也許它有效。另外,我不能說這個圖書館是否對你的程序過度。作爲一個快速解決方案,您可以每隔一分鐘左右重新註冊一次圖標 - 最終它會再次顯示。 – 9000

回答

0

我建議在窗口激活事件中重新註冊托盤圖標。這樣,只要您切換回您的應用程序,托盤圖標就會更新。例如:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class MyApp extends JFrame 
{ 
    private static TrayIcon trayIcon = null; 

    public static void main(String[] args) { 
     JFrame app = new MyApp(); 
     app.setSize(400,400); 
     app.setVisible(true); 

     final Image image = Toolkit.getDefaultToolkit().getImage("MyImage.gif"); 

     app.addWindowListener(new WindowAdapter() { 
     public void windowActivated(WindowEvent ev) { 
      registerTrayIcon(image); 
     } 
     }); 
    } 

    private static void registerTrayIcon(Image image) { 
     SystemTray tray = SystemTray.getSystemTray(); 

     if(trayIcon != null) { 
      tray.remove(trayIcon); 
     } 

     trayIcon = new TrayIcon(image, "Tray Demo", null); 

     try { 
      tray.add(trayIcon); 
     } 
     catch(Exception ex) { 
      throw new RuntimeException(ex); 
     } 
    } 
} 
+0

我的問題是,我沒有一個窗口,我去。我的系統托盤本身就是一些命令的啓動器。我需要聽聽Windows任務欄的娛樂,然後我可以重新添加它。 – SharonBL

+0

請更新您的原始問題 –

+0

做到了。 10x :-) – SharonBL