我看到很多关于这个问题的问题,但都没有解决方案。 我的问题是: 我写了一个具有系统托盘图标的小型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