我看到很多關於這個問題的問題,但都沒有解決方案。 我的問題是: 我寫了一個具有系統托盤圖標的小型java應用程序。 當Windows資源管理器崩潰時(可以用停止explorer.exe進程來模擬),恢復後,我的系統托盤圖標消失,但我的應用程序進程繼續運行。資源管理器崩潰後恢復Java系統托盤圖標
當explorer.exe重新加載時,有沒有辦法恢復我的圖標?
我的問題是,我沒有一個窗口,我去。我的系統托盤本身就是一些命令的啓動器。我需要聽聽Windows任務欄的娛樂,然後我可以重新添加它。
我看到很多關於這個問題的問題,但都沒有解決方案。 我的問題是: 我寫了一個具有系統托盤圖標的小型java應用程序。 當Windows資源管理器崩潰時(可以用停止explorer.exe進程來模擬),恢復後,我的系統托盤圖標消失,但我的應用程序進程繼續運行。資源管理器崩潰後恢復Java系統托盤圖標
當explorer.exe重新加載時,有沒有辦法恢復我的圖標?
我的問題是,我沒有一個窗口,我去。我的系統托盤本身就是一些命令的啓動器。我需要聽聽Windows任務欄的娛樂,然後我可以重新添加它。
我建議在窗口激活事件中重新註冊托盤圖標。這樣,只要您切換回您的應用程序,托盤圖標就會更新。例如:
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);
}
}
}
參見http://stackoverflow.com/questions/7923645/how-to-re-add-icon-to-system-tray-after-explorer-exe-crash/7923753 – 9000
我之前看過這個帖子。你知道該怎麼做嗎? – SharonBL
唉,我沒有Windows機器來試試它。我在評論中鏈接了一篇文章,展示瞭如何使用[JNA](https://github.com/twall/jna)進行操作。也許它有效。另外,我不能說這個圖書館是否對你的程序過度。作爲一個快速解決方案,您可以每隔一分鐘左右重新註冊一次圖標 - 最終它會再次顯示。 – 9000