CrazyMan666 2011-06-27 22:10
浏览 215
已采纳

JAVA问题 一个类不知道哪里的问题 貌似出现了死循环了 大家帮忙看看吧?

package com.hao.player;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Start{

public static void main(String []args)
{
MySystemTray mst=MySystemTray.getInstance();
}
}
class MySystemTray implements ActionListener
{
private static MySystemTray instance = null;

private static PopupMenu popupMenu;//trayIcon的弹出菜单
public static TrayIcon trayIcon;//系统托盘的托盘图标
private static SystemTray systemTray;//创建系统托盘
private static MenuItem exit;//弹出菜单的项
private MySystemTray()
{
if(systemTray==null)
{
systemTray=SystemTray.getSystemTray();//得到一个系统托盘
}
Image image=Toolkit.getDefaultToolkit().getImage("picture.gif");
trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
trayIcon.setImageAutoSize(true);//使图片完全显示
try

{
systemTray.add(trayIcon);//增加系统托盘图标
} catch (AWTException e)

{
e.printStackTrace();
}
popupMenu=new PopupMenu();
trayIcon.setPopupMenu(popupMenu);
exit = new MenuItem("Exit", null);
popupMenu.add(exit);
trayIcon.addActionListener(new MySystemTray());
exit.addActionListener(new MySystemTray());
}
public static synchronized MySystemTray getInstance(){

if(instance==null)
{
instance=new MySystemTray();
}
return instance;
}
@Override
public void actionPerformed(ActionEvent e)

{
if(e.getSource()==exit)
{
systemTray.remove(trayIcon);
System.exit(0);
}else if(e.getSource()==trayIcon)
{
MainFrame mainFrame=new MainFrame();
mainFrame.showMusicList();
mainFrame.setAlwaysOnTop(true);
mainFrame.setVisible(true);

}

}
}
这段代码导致我的任务栏多了很多trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
很多托盘图标被创建了,为什么呢就像一个死循环!!!

  • 写回答

2条回答 默认 最新

  • fmjsjx 2011-06-28 09:09
    关注

    [quote][code="java"]
    private MySystemTray() {
    if (systemTray==null) {
    systemTray=SystemTray.getSystemTray();//得到一个系统托盘
    }
    Image image=Toolkit.getDefaultToolkit().getImage("picture.gif");
    trayIcon=new TrayIcon(image, "双击弹出程序,右击弹出菜单");
    trayIcon.setImageAutoSize(true);//使图片完全显示
    try {
    systemTray.add(trayIcon);//增加系统托盘图标
    } catch (AWTException e) {
    e.printStackTrace();
    }
    popupMenu=new PopupMenu();
    trayIcon.setPopupMenu(popupMenu);
    exit = new MenuItem("Exit", null);
    popupMenu.add(exit);
    trayIcon.addActionListener(new MySystemTray());
    exit.addActionListener(new MySystemTray());
    }
    [/code][/quote]
    最后两行不就递归调用了么?而且没有结束的分支,无限递归……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作