【发布时间】:2014-06-19 20:48:24
【问题描述】:
我正在用 Java 创建一个应用程序,我希望当您最小化为一个图标时,该应用程序必须“隐藏”在系统托盘中。 我使用的代码是这样的:(代码的重要部分)
myFrame = new JFrame();
myFrame.addWindowListener(new WindowAdapter() {
@Override
public void windowIconified(WindowEvent e) {
PutTray();
}
@Override
public void windowDeiconified(WindowEvent e) {
System.out.println("Deiconified");
}
});
这是一个“PutTray”函数:
private void PutTray()
{
try
{
tray.add(trayIcon); // Initialized elsewhere
myFrame.setVisible(false);
} catch (AWTException e) {
System.err.println(e);
}
}
要恢复(通过按下最小化图标时弹出菜单中的选项):
MenuItem show = new MenuItem("Show");
show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myFrame.setVisible(true);
myFrame.setState(JFrame.NORMAL);
tray.remove(trayIcon);
}
});
该代码在 Windows 8 上完美运行,但在 Linux(Kali Linux 甚至 Ubuntu)上无法运行。 为什么 Windows 是而 Linux 不是?
编辑:
在 Linux 上,按下命令显示应用程序后,它会出现一小会儿,然后再次最小化。基本上是触发事件“windowDeiconified”并在事件“windowIconified”之后立即触发,无需花时间做其他事情,然后应用程序显示在系统托盘中。
【问题讨论】:
-
能否请您告诉我们究竟哪一部分在 Linux 上不起作用?
-
对不起...我忘了包括它。现在我已经添加了更改
-
这只是一个猜测,但是您是否尝试在取消图标化窗口时执行
setState()之前setVisible? -
没有setState语句你试过了吗?
-
没有它也一样。